51 lines
2.2 KiB
Bash
51 lines
2.2 KiB
Bash
# Sourced, never executed: the activation staleness check shared by
|
|
# scripts/_hermes-python (the shebang prologue) and scripts/run_tests.sh.
|
|
#
|
|
# pm records, beside the installed-state file named by __HERMES_ACTIVATED, one
|
|
# stamp per dependency input carrying the exact mtime that input had when the
|
|
# install was last verified against it (pm.environments.record_activation_inputs).
|
|
# Any input whose mtime DIFFERS from its stamp (newer or older, since a branch
|
|
# switch can move it either way) means the inherited environment may not match
|
|
# its inputs. `-nt`/`-ot` are bash builtins, so the check costs no process
|
|
# spawn, and every successful activation re-records, so one re-activation
|
|
# settles it. Missing stamps or inputs, a dangling sentinel or a literal "1"
|
|
# all read as stale.
|
|
|
|
# hermes_activation_current REPO: status 0 when the inherited environment
|
|
# matches REPO's current inputs.
|
|
hermes_activation_current() {
|
|
local repo="$1" sentinel stamps stamp input stamped=0
|
|
[ -n "${__HERMES_ACTIVATED:-}" ] && [ -e "${__HERMES_ACTIVATED}" ] || return 1
|
|
# activate.ps1 records a Windows path; Git Bash accepts it with slashes.
|
|
sentinel="${__HERMES_ACTIVATED//\\//}"
|
|
stamps="${sentinel%/*}/inputs"
|
|
[ -f "$stamps/.project-root" ] || return 1
|
|
local owner="$repo" recorded
|
|
recorded="$(< "$stamps/.project-root")"
|
|
if command -v cygpath >/dev/null 2>&1; then
|
|
owner="$(cygpath -am "$repo")" || return 1
|
|
recorded="${recorded//\\//}"
|
|
[ "${owner,,}" = "${recorded,,}" ] || return 1
|
|
else
|
|
[ "$(cd "$owner" && pwd -P)" = "$recorded" ] || return 1
|
|
fi
|
|
for stamp in "$stamps"/* "$stamps"/*/*; do
|
|
[ -f "$stamp" ] || continue
|
|
stamped=1
|
|
input="$repo/${stamp#"$stamps"/}"
|
|
if [ ! -e "$input" ] || [ "$input" -nt "$stamp" ] || [ "$input" -ot "$stamp" ]; then
|
|
return 1
|
|
fi
|
|
done
|
|
[ "$stamped" = 1 ]
|
|
}
|
|
|
|
# hermes_ensure_activated REPO: source REPO/activate unless the inherited
|
|
# environment is current. `--` passes no options: `source` without arguments
|
|
# would hand activate the CALLER's positional parameters.
|
|
hermes_ensure_activated() {
|
|
hermes_activation_current "$1" && return 0
|
|
# shellcheck source=/dev/null
|
|
. "$1/activate" --
|
|
}
|