feat(link): 連結一律寫成 [文字](絕對網址),寫入前先驗證連得到
取消 [[頁名]] 與 [[顯示文字|頁名]] 兩種同 wiki 寫法,不再分「同存取庫」與 「跨存取庫」兩條規則。那種寫法只在自己那個 wiki 內解析,寫錯不報錯,畫面上 看起來像普通文字或死連結,巡不到也修不了。 連結寫進頁面前先過 jsc-gitea 的 link-check.sh,結束碼 0 才寫。驗證一律走 API, 不看網頁狀態碼:私有存取庫的網頁網址對未登入請求一律回 404,拿狀態碼判會把 好連結判成壞的。認證失敗回 7,與死連結的 1 分開,免得金鑰一過期就把還在的頁 整批判死。
This commit is contained in:
+41
-11
@@ -24,6 +24,13 @@
|
||||
# 一份寫得成的異常紀錄,不該因為目錄頁沒地方放就整份丟掉。
|
||||
# 寫入 wiki 失敗才以 exit 4 回報,訊息走 stderr。
|
||||
#
|
||||
# 連結:
|
||||
# 目錄頁那一列指向異常頁,一律寫成 [{文字}]({連結}),網址取 jsc-gitea 的
|
||||
# gitea.sh wiki-url,不自己組路徑。
|
||||
# 寫入前先把那個網址交給 jsc-gitea 的 link-check.sh,結束碼 0 才把連結寫進那一列。
|
||||
# 驗不過就只留純文字頁名:那一列照寫、異常頁照寫、結束碼照舊。這一段一律不改結束碼,
|
||||
# 本腳本是失敗回報路徑,回報失敗不該再變成一次失敗。
|
||||
#
|
||||
# 結束碼: 0=已寫入異常頁並印出頁名(取得網址就一併印出),或以上列四種安靜降級原因之一
|
||||
# 結束、沒有寫出任何頁也沒有任何輸出——回報失敗不該再變成一次失敗
|
||||
# 2=用法錯誤(缺 --hook 或 --summary)
|
||||
@@ -139,8 +146,9 @@ if ! sh "$gsh" wiki-put "$wrepo" "$page" "$tmp_page" >/dev/null 2>&1; then
|
||||
exit 4
|
||||
fi
|
||||
|
||||
# 目錄頁與異常頁分屬兩個存取庫,wiki 的 [[頁名]] 只在同一個存取庫內解得開,跨庫一律解成
|
||||
# 死連結。所以目錄頁指向異常頁的連結一律用絕對網址。
|
||||
# 目錄頁那一列指向異常頁,連結一律寫成 [{文字}]({連結}),網址取 gitea.sh wiki-url。
|
||||
# wiki 自己那種雙中括號寫法只在同一個 wiki 裡解得開,寫錯不會報錯,畫面上看起來像正常
|
||||
# 文字或死連結,巡不到也修不了。
|
||||
# 網址取不到不算失敗:異常頁已經寫成功了,只是這一列少一條連結。這裡把原因記下來走 stderr,
|
||||
# 結束碼照舊——安靜降級仍是 exit 0,回報失敗不該再變成一次失敗。
|
||||
url=$(sh "$gsh" wiki-url "$wrepo" "$page" 2>/dev/null)
|
||||
@@ -161,17 +169,39 @@ emit() { # 異常頁已經寫成功,頁名一定要印;網址取不到就只
|
||||
if [ -n "$url" ]; then printf '%s %s\n' "$page" "$url"; else printf '%s\n' "$page"; fi
|
||||
}
|
||||
|
||||
row=$(printf '| %s | [%s](%s) | %s | %s | %s | %s |' \
|
||||
"$ts" "$hook 異常 $ts" "$url" "$repo" "$hook" "$code" "$summary")
|
||||
# 連結先驗證連得到,才寫進目錄頁那一列。沒驗過的連結寫進去,異常頁一樣會在目錄頁長出
|
||||
# 死連結,而目錄頁是別人查問題的入口。驗不過就只留純文字頁名,那一列照寫。
|
||||
link_cell="$page"
|
||||
if [ -n "$url" ]; then
|
||||
# link-check.sh 與 gitea.sh 同一個 tools 目錄,路徑直接由已經解出來的那一支推得,
|
||||
# 不另寫一套搜尋,兩邊才不會一支解到開發版面、一支解到安裝版面。
|
||||
lcs="$(dirname "$gsh")/link-check.sh"
|
||||
if [ ! -f "$lcs" ]; then
|
||||
echo "[jsc] 找不到 $lcs,這一列的連結沒驗過,只留頁名;$page 已建立。" >&2
|
||||
else
|
||||
sh "$lcs" "$url" >/dev/null 2>&1
|
||||
lc_code=$?
|
||||
case "$lc_code" in
|
||||
0) link_cell=$(printf '[%s](%s)' "$page" "$url") ;;
|
||||
# 7 是金鑰失效,不是死連結。金鑰過期時私有存取庫的回應與「頁不存在」分不出來,
|
||||
# 把它當成死連結就會連還在的頁一起判死。
|
||||
7) echo "[jsc] 連結驗證遇上金鑰失效(link-check.sh 回 7),不判成死連結,這一列只留頁名;$page 已建立。" >&2 ;;
|
||||
3) echo "[jsc] GITEA_HOST 未設定(link-check.sh 回 3),連結沒驗過,這一列只留頁名;$page 已建立。" >&2 ;;
|
||||
*) echo "[jsc] 連結驗不過(link-check.sh 結束碼 $lc_code),這一列只留頁名;$page 已建立。" >&2 ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
row=$(printf '| %s | %s | %s | %s | %s | %s |' \
|
||||
"$ts" "$link_cell" "$repo" "$hook" "$code" "$summary")
|
||||
|
||||
build_contents() { # 用範本建一份全新的目錄頁;只有確定舊頁不存在時才可以呼叫
|
||||
fill '{yyyy-MM-dd HH:mm:ss}' "$ts" < "$ROOT/templates/error-contents.md" \
|
||||
| fill '{error url}' "$url" \
|
||||
| fill '{error title}' "$hook 異常 $ts" \
|
||||
| fill '{owner}/{repo}' "$repo" \
|
||||
| fill '{hook_name}' "$hook" \
|
||||
| fill '{exit_code}' "$code" \
|
||||
| fill '{error_summary}' "$summary" > "$tmp_list"
|
||||
# 範本的示範列整列換成本次這一列,不逐格填。連結那一格已經驗過也組好了,拆成頁名與
|
||||
# 網址兩個佔位再填,會在驗不過的時候留下一個空網址的死連結。
|
||||
ROW="$row" awk '
|
||||
index($0, "| {yyyy-MM-dd HH:mm:ss} |") == 1 { print ENVIRON["ROW"]; next }
|
||||
{ print }
|
||||
' "$ROOT/templates/error-contents.md" > "$tmp_list"
|
||||
}
|
||||
|
||||
if [ -z "$crepo" ]; then
|
||||
|
||||
Reference in New Issue
Block a user