71 lines
2.8 KiB
Bash
Executable File
71 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
installer="$repo_dir/setup/scripts/link-vicinae-scripts"
|
|
dotfile_installer="$repo_dir/setup/scripts/link-dotfiles"
|
|
top_level_installer="$repo_dir/install"
|
|
work="$(mktemp -d /tmp/panama-command-install.XXXXXX)"
|
|
data_dir="$work/share/vicinae"
|
|
fake_bin="$work/bin"
|
|
vicinae_log="$work/vicinae.log"
|
|
|
|
fail() {
|
|
printf 'Panama command install contract: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
cleanup() {
|
|
rm -rf "$work"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
[[ -x "$installer" ]] || fail 'Vicinae script installer is missing or not executable'
|
|
if rg -q 'setup/scripts/link-vicinae-scripts' "$dotfile_installer"; then
|
|
fail 'link-dotfiles also invokes the command installer'
|
|
fi
|
|
rg -Fq 'do "$script"; done' "$top_level_installer" \
|
|
|| fail 'top-level installer sources setup scripts into one shared shell'
|
|
|
|
mkdir -p "$data_dir/scripts/panama" "$fake_bin"
|
|
printf 'user-owned\n' >"$data_dir/scripts/panama/keep.sh"
|
|
|
|
cat >"$fake_bin/vicinae" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
printf 'vicinae' >>"$PANAMA_VICINAE_TEST_LOG"
|
|
printf ' <%s>' "$@" >>"$PANAMA_VICINAE_TEST_LOG"
|
|
printf '\n' >>"$PANAMA_VICINAE_TEST_LOG"
|
|
[[ ${1:-} == ping || ${1:-} == cmd ]]
|
|
EOF
|
|
chmod +x "$fake_bin/vicinae"
|
|
|
|
PATH="$fake_bin:$PATH" PANAMA_PATH="$repo_dir" VICINAE_DATA_DIR="$data_dir" \
|
|
PANAMA_VICINAE_TEST_LOG="$vicinae_log" "$installer" >/dev/null
|
|
|
|
target="$data_dir/scripts/panama"
|
|
backup="$data_dir/backups/panama.pre-panama"
|
|
[[ -L "$target" ]] || fail 'Panama command directory was not linked'
|
|
[[ "$(readlink -f "$target")" == "$(readlink -f "$repo_dir/config/local/share/vicinae/scripts")" ]] \
|
|
|| fail 'runtime command link points outside the tracked source'
|
|
[[ -f "$backup/keep.sh" ]] || fail 'pre-existing user command directory was not preserved'
|
|
[[ "$(cat "$backup/keep.sh")" == user-owned ]] || fail 'preserved user command changed'
|
|
[[ ! -e "$data_dir/scripts/panama.pre-panama" ]] \
|
|
|| fail 'preserved commands remained inside Vicinae search paths'
|
|
|
|
expected_calls=$'vicinae <ping>\nvicinae <cmd> <launch> <core:reload-scripts>'
|
|
[[ "$(cat "$vicinae_log")" == "$expected_calls" ]] \
|
|
|| fail "Vicinae reload sequence was wrong: $(cat "$vicinae_log")"
|
|
|
|
# A second setup pass must update the same narrow link without creating more
|
|
# backups or disturbing the preserved directory.
|
|
: >"$vicinae_log"
|
|
PATH="$fake_bin:$PATH" PANAMA_PATH="$repo_dir" VICINAE_DATA_DIR="$data_dir" \
|
|
PANAMA_VICINAE_TEST_LOG="$vicinae_log" "$installer" >/dev/null
|
|
[[ -L "$target" ]] || fail 'second install did not leave the command link intact'
|
|
[[ -f "$backup/keep.sh" ]] || fail 'second install disturbed the original backup'
|
|
[[ ! -e "$data_dir/backups/panama.pre-panama.pre-panama" ]] \
|
|
|| fail 'second install created a duplicate backup'
|
|
|
|
printf 'Panama command install contract: PASS\n'
|