fix(version-guard): 依 CLI 分離遠端版本快取
This commit is contained in:
+27
-6
@@ -33,8 +33,9 @@
|
||||
#
|
||||
# 逃生門:JSC_VERSION_GUARD=off 完全略過檢查(離線工作時用)。
|
||||
#
|
||||
# 快取:$JSC_HOME/version-cache/{domain},單行「{版本} {epoch}」,
|
||||
# 預設 600 秒內不重查(JSC_VERSION_TTL 可調)。hook 與 report 共用同一份。
|
||||
# 快取:$JSC_HOME/version-cache/{CLI 代號}/{domain},單行「{版本} {epoch}」,
|
||||
# 預設 600 秒內不重查(JSC_VERSION_TTL 可調)。hook 與 report 在同一支 CLI 內共用。
|
||||
# 舊路徑 $JSC_HOME/version-cache/{domain} 會在第一次讀取時複製到當前 CLI 的新路徑。
|
||||
#
|
||||
# 另有一個非 hook 的子指令:
|
||||
# version-guard.sh report 把每個已安裝 jsc-* plugin 的版本比對印成 TSV,每行
|
||||
@@ -106,13 +107,33 @@ remote_version() { # $1=domain $2=host $3=owner
|
||||
}
|
||||
|
||||
TTL="${JSC_VERSION_TTL:-600}"
|
||||
cache_dir="$JSC_HOME/version-cache"
|
||||
cache_root="$JSC_HOME/version-cache"
|
||||
|
||||
cache_cli() {
|
||||
_cli=$(cli_name | sed 's/[^A-Za-z0-9._-]/_/g')
|
||||
[ -n "$_cli" ] || _cli=unknown
|
||||
printf '%s' "$_cli"
|
||||
}
|
||||
|
||||
cache_file() { # $1=domain
|
||||
printf '%s/%s/%s' "$cache_root" "$(cache_cli)" "$1"
|
||||
}
|
||||
|
||||
legacy_cache_file() { # $1=domain
|
||||
printf '%s/%s' "$cache_root" "$1"
|
||||
}
|
||||
|
||||
# 帶快取的遠端版本查詢。hook 與 report 共用同一份快取與同一個 TTL:
|
||||
# report 每個 domain 各打一次網路(還帶重試),/jsc-cli:deploy 一跑就是全部 domain,
|
||||
# 不共用快取等於每次部署都付一輪網路成本。
|
||||
# 不共用快取等於每次部署都付一輪網路成本。同主機的不同 CLI 不共用快取,避免其中一支
|
||||
# 讀到另一支留下的檢查紀錄。
|
||||
cached_remote_version() { # $1=domain $2=host $3=owner
|
||||
_cache="$cache_dir/$1"
|
||||
_cache=$(cache_file "$1")
|
||||
_legacy=$(legacy_cache_file "$1")
|
||||
if [ ! -f "$_cache" ] && [ -f "$_legacy" ]; then
|
||||
mkdir -p "${_cache%/*}" 2>/dev/null || true
|
||||
cat "$_legacy" > "$_cache" 2>/dev/null || true
|
||||
fi
|
||||
_now=$(now_epoch)
|
||||
if [ -f "$_cache" ]; then
|
||||
_cv=$(cut -d' ' -f1 "$_cache" 2>/dev/null)
|
||||
@@ -123,7 +144,7 @@ cached_remote_version() { # $1=domain $2=host $3=owner
|
||||
fi
|
||||
_rv=$(remote_version "$1" "$2" "$3")
|
||||
if [ -n "$_rv" ]; then
|
||||
mkdir -p "$cache_dir" 2>/dev/null || true
|
||||
mkdir -p "${_cache%/*}" 2>/dev/null || true
|
||||
printf '%s %s\n' "$_rv" "$_now" > "$_cache" 2>/dev/null || true
|
||||
fi
|
||||
printf '%s' "$_rv"
|
||||
|
||||
Reference in New Issue
Block a user