85 lines
2.2 KiB
Bash
85 lines
2.2 KiB
Bash
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
|
|
|
|
test_tmp=$(mktemp -d)
|
|
trap 'rm -rf "$test_tmp"' EXIT
|
|
|
|
stub_bin="$test_tmp/bin"
|
|
git_log="$test_tmp/git.log"
|
|
checkout="$test_tmp/checkout"
|
|
mkdir -p "$stub_bin" "$checkout"
|
|
|
|
cat >"$stub_bin/git" <<'SH'
|
|
#!/bin/bash
|
|
|
|
printf '%s\n' "$*" >>"$TEST_GIT_LOG"
|
|
|
|
[[ $1 == "-C" ]] || exit 1
|
|
shift 2
|
|
|
|
case "$1" in
|
|
rev-parse)
|
|
case "$2" in
|
|
--is-inside-work-tree)
|
|
[[ ${TEST_GIT_CHECKOUT:-yes} == "yes" ]] || exit 1
|
|
echo true
|
|
;;
|
|
--abbrev-ref)
|
|
[[ ${TEST_GIT_UPSTREAM:-origin/quattro} != "none" ]] || exit 1
|
|
echo "${TEST_GIT_UPSTREAM:-origin/quattro}"
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
;;
|
|
pull)
|
|
[[ $2 == "--ff-only" ]]
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
SH
|
|
chmod +x "$stub_bin/git"
|
|
|
|
run_dev_update() {
|
|
OMARCHY_PATH="$1" \
|
|
TEST_GIT_LOG="$git_log" \
|
|
PATH="$stub_bin:$PATH" \
|
|
"$ROOT/bin/omarchy-update-dev"
|
|
}
|
|
|
|
: >"$git_log"
|
|
run_dev_update /usr/share/omarchy
|
|
[[ ! -s $git_log ]] || fail "package-backed updates do not invoke git" "$(cat "$git_log")"
|
|
pass "package-backed updates skip the dev checkout step"
|
|
|
|
: >"$git_log"
|
|
run_dev_update "$checkout"
|
|
grep -Fx -- "-C $checkout pull --ff-only" "$git_log" >/dev/null ||
|
|
fail "dev checkout update pulls its upstream with fast-forward only" "$(cat "$git_log")"
|
|
pass "dev checkout update pulls its configured upstream"
|
|
|
|
: >"$git_log"
|
|
TEST_GIT_UPSTREAM=none run_dev_update "$checkout"
|
|
if grep -q ' pull ' "$git_log"; then
|
|
fail "dev checkout without an upstream is not pulled" "$(cat "$git_log")"
|
|
fi
|
|
pass "dev checkout without an upstream is skipped safely"
|
|
|
|
: >"$git_log"
|
|
if TEST_GIT_CHECKOUT=no run_dev_update "$checkout" >"$test_tmp/invalid.out" 2>"$test_tmp/invalid.err"; then
|
|
fail "invalid dev checkout fails the update"
|
|
fi
|
|
grep -F "OMARCHY_PATH is not a git checkout: $checkout" "$test_tmp/invalid.err" >/dev/null ||
|
|
fail "invalid dev checkout reports the configured path" "$(cat "$test_tmp/invalid.err")"
|
|
pass "invalid dev checkout fails with a useful error"
|
|
|
|
grep -qE '^ *omarchy-update-dev$' "$ROOT/bin/omarchy-update" ||
|
|
fail "top-level update includes the dev checkout step"
|
|
pass "top-level update includes the dev checkout step"
|