Merge pull request 'fix(migrate-wiki): 正推比對涵蓋兩代頁名規則' (#49) from fix/migrate-two-hash-generations into develop
Reviewed-on: #49
This commit was merged in pull request #49.
This commit is contained in:
+12
-3
@@ -66,15 +66,21 @@ while [ "$#" -gt 0 ]; do
|
||||
esac
|
||||
done
|
||||
|
||||
old_hash() { # 舊演算法:SHA-1 前 8 碼大寫;首碼落在 0-9ABC 就改成 H 加前 7 碼
|
||||
old_hash() { # 舊演算法:一個候選鍵可能對到兩種舊頁名,兩種都印出來,一行一個
|
||||
# 這裡刻意印兩種,因為頁名規則改過兩次,兩代的頁至今並存:
|
||||
# 第一代 只取 SHA-1 前 8 碼大寫。
|
||||
# 第二代 在第一代之上,首碼落在 0-9ABC 就改成 H 加前 7 碼。
|
||||
# 只算第二代的話,第一代那些首碼落在 0-9ABC 的頁一律配不到,會被誤判成孤兒
|
||||
# 留在原地。實例:同一個鍵在第一代是 1C516D85、第二代是 H1C516D8,兩張頁都在。
|
||||
# 首碼落在 D、E、F 的鍵兩代同值,這時只印一行。
|
||||
if command -v sha1sum >/dev/null 2>&1; then
|
||||
raw=$(printf '%s' "$1" | sha1sum | awk '{print $1}')
|
||||
else
|
||||
raw=$(printf '%s' "$1" | shasum -a 1 | awk '{print $1}')
|
||||
fi
|
||||
h=$(printf '%s' "$raw" | cut -c1-8 | tr a-f A-F)
|
||||
case "$h" in [0-9ABC]*) h="H$(printf '%s' "$h" | cut -c1-7)" ;; esac
|
||||
printf '%s\n' "$h"
|
||||
case "$h" in [0-9ABC]*) printf 'H%s\n' "$(printf '%s' "$h" | cut -c1-7)" ;; esac
|
||||
}
|
||||
|
||||
rc=0
|
||||
@@ -218,7 +224,10 @@ sort -u "$work/keys" > "$work/keys.uniq"
|
||||
: > "$work/hashes"
|
||||
while IFS= read -r k <&3; do
|
||||
[ -n "$k" ] || continue
|
||||
printf '%s\t%s\n' "$(old_hash "$k")" "$k" >> "$work/hashes"
|
||||
# old_hash 一個鍵可能印兩行(兩代頁名規則),每一行都要能配得到同一個鍵
|
||||
old_hash "$k" | while IFS= read -r h; do
|
||||
printf '%s\t%s\n' "$h" "$k" >> "$work/hashes"
|
||||
done
|
||||
done 3< "$work/keys.uniq"
|
||||
|
||||
# ---- 第三輪:正推配對 ----
|
||||
|
||||
Reference in New Issue
Block a user