feat(wiki): 目錄頁專用存取庫、HASH 去除截短與 H 前綴
What:CONTENTS 成為第 15 種頁面類型,解析鏈為 JSC_WIKI_REPO_CONTENTS 到 JSC_WIKI_REPO,刻意不退回型別變數。hash-id 拿掉 8 碼截短與 H 前綴改寫,只留大寫 轉換,輸出完整 40 碼;空輸入改成用法錯誤。新增 page-name.sh、wiki-contents.sh、 migrate-wiki.sh 與 wiki-delete 子命令。 Why:H 前綴會命中 16 個首碼裡的 13 個,還丟掉第 8 碼,把有效熵壓到 28 位元,而且 全庫查不到任何理由紀錄。目錄頁的整列 upsert 原本 14 處只有一處寫成程式,同一段判斷 做 14 次,錯一次就少一筆紀錄。 How:頁名樣式仍收 H 加 7 碼的舊頁,遷移期間讀得到舊頁。wiki-contents.sh 建新頁時 剝掉範本的示範列,否則每個目錄頁第一次建立都會留一列佔位死連結。migrate-wiki.sh 預設只印對照表,--apply 先寫新頁、確認寫成、才刪舊頁;孤兒頁只列不猜,因為 SHA-1 不可逆,新頁名只能靠候選鍵正推。 Who:jsc-gitea
This commit is contained in:
+11
-9
@@ -1,12 +1,14 @@
|
||||
#!/usr/bin/env sh
|
||||
# hash-id — 產生 8 碼大寫 SHA-1 hash。
|
||||
# hash-id — 產生完整 40 碼大寫 SHA-1 hash。
|
||||
# 用法:
|
||||
# hash-id <text>
|
||||
# printf '%s' <text> | hash-id
|
||||
# 規則:
|
||||
# 先取 SHA-1 前 8 碼大寫。
|
||||
# 若首碼為 0-9、A、B、C,改成 H 加上原 SHA-1 前 7 碼。
|
||||
# 取完整 SHA-1 四十碼,a-f 轉大寫,不截短、不加前綴。
|
||||
# 輸入為空即 exit 2。空字串本身也有合法的 SHA-1,靜靜回傳它就會生出
|
||||
# 一個看起來正常的頁名,把內容寫到沒有人讀的那一頁。
|
||||
# 結束碼: 0=成功 1=這台機器沒有 sha1sum 也沒有 shasum,算不出雜湊
|
||||
# 2=用法錯誤:沒有給文字,或給的是空字串
|
||||
set -eu
|
||||
|
||||
input=''
|
||||
@@ -18,6 +20,11 @@ else
|
||||
input=$(cat)
|
||||
fi
|
||||
|
||||
if [ -z "$input" ]; then
|
||||
echo 'usage: hash-id <text>' >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if command -v sha1sum >/dev/null 2>&1; then
|
||||
raw=$(printf '%s' "$input" | sha1sum | awk '{print $1}')
|
||||
elif command -v shasum >/dev/null 2>&1; then
|
||||
@@ -27,9 +34,4 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
hash=$(printf '%s' "$raw" | cut -c1-8 | tr a-f A-F)
|
||||
case "$hash" in
|
||||
[0-9ABC]*) hash="H$(printf '%s' "$hash" | cut -c1-7)" ;;
|
||||
esac
|
||||
|
||||
printf '%s\n' "$hash"
|
||||
printf '%s\n' "$raw" | tr a-f A-F
|
||||
|
||||
Reference in New Issue
Block a user