From 658a16c56c96ed9f9edb700629a8ae45d3a0c9a8 Mon Sep 17 00:00:00 2001 From: Clemens Koza Date: Tue, 4 Jun 2024 22:52:11 +0200 Subject: [PATCH] add uninstall script and Just commands --- Justfile | 10 ++++++++ scripts/uninstall | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100755 scripts/uninstall diff --git a/Justfile b/Justfile index 73384e9..f1a24f7 100644 --- a/Justfile +++ b/Justfile @@ -28,5 +28,15 @@ install: (package "@local") # install the library with the "@preview" prefix (for pre-release testing) install-preview: (package "@preview") +[private] +remove target: + ./scripts/uninstall "{{target}}" + +# uninstalls the library from the "@local" prefix +uninstall: (remove "@local") + +# uninstalls the library from the "@preview" prefix (for pre-release testing) +uninstall-preview: (remove "@preview") + # run ci suite ci: test doc diff --git a/scripts/uninstall b/scripts/uninstall new file mode 100755 index 0000000..2d65732 --- /dev/null +++ b/scripts/uninstall @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +set -eu + +# adapted from https://github.com/johannes-wolf/cetz/blob/35c0868378cea5ad323cc0d9c2f76de8ed9ba5bd/scripts/package +# licensed under Apache License 2.0 + +# Local package directories per platform +if [[ "$OSTYPE" == "linux"* ]]; then + DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}" +elif [[ "$OSTYPE" == "darwin"* ]]; then + DATA_DIR="$HOME/Library/Application Support" +else + DATA_DIR="${APPDATA}" +fi + +if (( $# < 1 )) || [[ "${1:-}" == "help" ]]; then + echo "uninstall TARGET" + echo "" + echo "removes the package installed into a directory named '/'" + echo "at TARGET. If TARGET is set to @local or @preview, the local Typst package" + echo "directory will be used so that the package gets installed for local use." + echo "The name and version are read from 'typst.toml' in the project root." + echo "" + echo "Local package prefix: $DATA_DIR/typst/package/local" + echo "Local preview package prefix: $DATA_DIR/typst/package/preview" + exit 1 +fi + +function read-toml() { + local file="$1" + local key="$2" + # Read a key value pair in the format: = "" + # stripping surrounding quotes. + perl -lne "print \"\$1\" if /^${key}\\s*=\\s*\"(.*)\"/" < "$file" +} + +ROOT="$(cd "$(dirname "$0")"; pwd -P)/.." # macOS has no realpath +TARGET="${1:?Missing target path, @local or @preview}" +PKG_PREFIX="$(read-toml "$ROOT/typst.toml" "name")" +VERSION="$(read-toml "$ROOT/typst.toml" "version")" + +if [[ "$TARGET" == "@local" ]]; then + TARGET="${DATA_DIR}/typst/packages/local/" + echo "Install dir: $TARGET" +elif [[ "$TARGET" == "@preview" ]]; then + TARGET="${DATA_DIR}/typst/packages/preview/" + echo "Install dir: $TARGET" +fi + +TARGET="${TARGET:?}/${PKG_PREFIX:?}/${VERSION:?}" +echo "Package to uninstall: $TARGET" +if [[ ! -e "${TARGET:?}" ]]; then + echo "Package was not found." +elif rm -r "${TARGET:?}" 2>/dev/null; then + echo "Successfully removed." +else + echo "Removal failed." +fi