feat(wiki): 三個目錄頁改走專用存取庫,比對鍵改用裸 HASH
What:LOG_CONTENTS、LEARN_CONTENTS、REPORT_CONTENTS 改由 wiki-repo CONTENTS 解析並透過 wiki-contents.sh upsert 寫入,內容頁仍各走自己的型別。LOG 與 REPORT 的目錄頁新增一欄裸 HASH 當比對鍵。 Why:比對鍵原本是含網址的儲存格,換主機、換存取庫或 URL 編碼有差就比對不到, upsert 會走附加分支,同一頁多出第二列而舊列永遠不再更新。REPORT 更脆:存取庫一換, 雜湊與網址同時變,四個期間的列會一次全部重複。 How:worklog-pending.sh 的 valid_hash 放寬成 40 碼、8 碼與 H 加 7 碼三種形狀。 放寬的是長度不是字元集——先剝字元再比長度的順序保留,路徑穿越與換行注入照樣擋下。 年報不得沿用日誌存取庫那條規則收斂到內容頁,目錄頁同住一庫是另一回事。 Who:jsc-log
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
# 教訓目錄
|
||||
|
||||
> 由 `jsc-log:learn` 維護。這是教訓目錄頁 `LEARN_CONTENTS`。每個存取庫一列;`LEARN_{HASH}` 的 `{HASH}` 依共用 wiki hash 規則產生:先取 `{owner}/{repo}` 的 SHA-1 前 8 碼並轉成大寫;首碼若是 `0-9`、`A`、`B`、`C`,改用 `H` 加上原前 7 碼,總長維持 8 碼。
|
||||
> 寫入語意:一列代表一個存取庫。先讀整頁,找得到該存取庫既有的那一列就更新那一列,找不到才新增一列。
|
||||
> 由 `jsc-log:learn` 維護。這是教訓目錄頁 `LEARN_CONTENTS`。每個存取庫一列;`LEARN_{HASH}` 的 `{HASH}` 依共用 wiki hash 規則產生:取 `{owner}/{repo}` 的完整 SHA-1 四十碼,a-f 轉大寫,不截短、不加前綴。
|
||||
> 本頁落在 `JSC_WIKI_REPO_CONTENTS` 解出的專用存取庫,教訓頁 `LEARN_{HASH}` 落在 `JSC_WIKI_REPO_LEARN` 的存取庫,兩者分屬不同 wiki。
|
||||
> 所以指向教訓頁的連結一律用 `gitea.sh wiki-url` 取得的絕對網址。`[[LEARN_{HASH}]]` 只在同一個 wiki 內解得開,寫在這裡就是死連結。
|
||||
> 寫入語意:一列代表一個存取庫。一律用 `jsc-gitea/tools/wiki-contents.sh upsert LEARN 1 {owner}/{repo} {列檔} {本範本}` 單列整頁寫回——它讀整頁、找得到該存取庫既有的那一列就換掉那一列,找不到才附加。
|
||||
> 鍵取第 1 欄的存取庫名稱,不取第 2 欄的連結。存取庫名稱每一輪都一樣,連結會隨主機名與頁名編碼變動。
|
||||
> 禁止整頁覆蓋,也不得改動別人的列。
|
||||
|
||||
| 存取庫名稱 | 教訓紀錄 | 最後更新時間 |
|
||||
| --- | --- | --- |
|
||||
| {owner}/{repo} | [[LEARN_{HASH}]] | {yyyy-MM-dd HH:mm} |
|
||||
| {owner}/{repo} | [LEARN_{HASH}]({教訓頁絕對網址}) | {yyyy-MM-dd HH:mm} |
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
# 日誌目錄
|
||||
|
||||
> 由 `jsc-log:worklog` 維護。每個日誌頁一列;頁名使用共享 `HASH` 規則,頁內仍依該週五日期整理。
|
||||
> 寫入語意:一列代表一個日誌頁。先讀整頁,找得到該頁既有的那一列就更新那一列,找不到才新增一列。
|
||||
> 由 `jsc-log:worklog` 維護。每個日誌頁一列;`{HASH}` 是 `{owner}/{repo}` 的完整 40 碼大寫十六進位 SHA-1,頁內仍依該週五日期整理。
|
||||
> 本頁落在 `JSC_WIKI_REPO_CONTENTS` 解出的專用存取庫,日誌頁 `LOG_{HASH}` 落在 `JSC_WIKI_REPO_LOG` 的存取庫,兩者分屬不同 wiki。
|
||||
> 所以指向日誌頁的連結一律用 `gitea.sh wiki-url` 取得的絕對網址。`[[LOG_{HASH}]]` 只在同一個 wiki 內解得開,寫在這裡就是死連結。
|
||||
> 寫入語意:一列代表一個日誌頁。一律用 `jsc-gitea/tools/wiki-contents.sh upsert LOG 2 {HASH} {列檔} {本範本}` 單列整頁寫回——它讀整頁、找得到該頁既有的那一列就換掉那一列,找不到才附加。
|
||||
> 鍵取第 2 欄的裸 HASH,不取第 1 欄的連結。第 1 欄的連結帶著主機名與存取庫名:`GITEA_HOST` 一換、`JSC_WIKI_REPO_LOG` 改指別的存取庫,或 Gitea 對頁名的編碼有差,連結就跟上一輪寫的不一樣,鍵比不到就走附加,同一個日誌頁多出第二列,舊列從此不再更新。裸 HASH 只跟 `{owner}/{repo}` 有關,這三件事都動不到它。
|
||||
> 禁止整頁覆蓋,也不得改動別人的列。
|
||||
|
||||
| 日誌頁 | 週五日期 | 條目數 | 最後更新 |
|
||||
| --- | --- | --- | --- |
|
||||
| [[LOG_{HASH}]] | {yyyy-MM-dd} | {n} | {yyyy-MM-dd HH:mm} |
|
||||
| 日誌頁 | HASH | 週五日期 | 條目數 | 最後更新 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| [LOG_{HASH}]({日誌頁絕對網址}) | {HASH} | {yyyy-MM-dd} | {n} | {yyyy-MM-dd HH:mm} |
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
# 報表目錄
|
||||
|
||||
> 由 `jsc-log:report` 維護。年、月、週、日各一頁;`HASH` 取 `{owner}/{repo}/{期間}`,算法與其他頁面共用。
|
||||
> 寫入語意:一列代表一個報表頁,也就是一個存取庫的一種期間。先讀整頁,找得到該報表頁既有的那一列就更新那一列,找不到才新增一列。
|
||||
> 由 `jsc-log:report` 維護。年、月、週、日各一頁;`HASH` 取 `{owner}/{repo}/{期間}` 的完整 40 碼大寫十六進位 SHA-1,算法與其他頁面共用,但這裡的 `{owner}/{repo}` 取 REPORT wiki 存取庫,不是程式碼存取庫。
|
||||
> 本頁落在 `JSC_WIKI_REPO_CONTENTS` 解出的專用存取庫,報表頁 `REPORT_{HASH}` 落在 `JSC_WIKI_REPO_REPORT` 的存取庫,兩者分屬不同 wiki。
|
||||
> 所以指向報表頁的連結一律用 `gitea.sh wiki-url` 取得的絕對網址。`[[REPORT_{HASH}]]` 只在同一個 wiki 內解得開,寫在這裡就是死連結。
|
||||
> 寫入語意:一列代表一個報表頁,也就是一個存取庫的一種期間。一律用 `jsc-gitea/tools/wiki-contents.sh upsert REPORT 2 {HASH} {列檔} {本範本}` 單列整頁寫回——它讀整頁、找得到該報表頁既有的那一列就換掉那一列,找不到才附加。
|
||||
> 鍵取第 2 欄的裸 HASH,不取第 1 欄的連結。第 1 欄的連結帶著主機名與頁名編碼,`GITEA_HOST` 一換或 Gitea 對頁名的編碼有差,連結就跟上一輪寫的不一樣,鍵比不到就走附加,同一個報表頁多出第二列,舊列從此不再更新。裸 HASH 不受這兩件事影響。
|
||||
> 但 `JSC_WIKI_REPO_REPORT` 改指別的存取庫是另一回事:HASH 本身就取自 REPORT wiki 存取庫,換庫等於換頁,四個期間會各多一列。那是換庫的本意,不是鍵失準,舊列請人工清掉。
|
||||
> 禁止整頁覆蓋,也不得改動別人的列。
|
||||
|
||||
| 報表頁 | 期間 | 最新一期 | 期數 | 最後更新 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| [[REPORT_{HASH}]] | {daily、weekly、monthly、yearly 四選一} | {最新一期的標籤} | {n} | {yyyy-MM-dd HH:mm} |
|
||||
| 報表頁 | HASH | 期間 | 最新一期 | 期數 | 最後更新 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| [REPORT_{HASH}]({報表頁絕對網址}) | {HASH} | {daily、weekly、monthly、yearly 四選一} | {最新一期的標籤} | {n} | {yyyy-MM-dd HH:mm} |
|
||||
|
||||
Reference in New Issue
Block a user