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
1.8 KiB
1.8 KiB
報表目錄
由
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 存取庫,換庫等於換頁,四個期間會各多一列。那是換庫的本意,不是鍵失準,舊列請人工清掉。 禁止整頁覆蓋,也不得改動別人的列。
| 報表頁 | HASH | 期間 | 最新一期 | 期數 | 最後更新 |
|---|---|---|---|---|---|
| REPORT_{HASH} | {HASH} | {daily、weekly、monthly、yearly 四選一} | {最新一期的標籤} | {n} | {yyyy-MM-dd HH:mm} |