Files
git/tools/slugify.sh
jiantw83 25792fd279 docs(tools): 補上腳本結束碼說明,並改指階梯規則正本
腳本標頭沒把每個結束碼代表什麼、該怎麼處理寫清楚,呼叫端只能用猜的。階梯表又同時抄在說明檔與技能內文,改規則時兩邊容易不同步。

- 推導基底的腳本標頭逐碼說明狀況與處置,並標明該碼屬於哪一種模式。
- 產生分支名的腳本標頭補上參數不足的結束碼。
- 說明檔刪掉重複的階梯表,改指向指引的階梯章節。
- 說明檔補上型別優先序腳本的說明,並更新兩支技能的摘要。
2026-08-31 11:05:49 +08:00

37 lines
1.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env sh
# slugify.sh — 把分支類型與描述轉成 ASCII 分支名 slug。
# 用法: slugify.sh {type} {phrase}
# 規則: 全部轉小寫,非 a-z0-9 的字元換成連字號,
# 連續連字號合併成一個,並去除開頭與結尾的連字號。
# 輸出: {type}/{slug}(例如: slugify.sh feat "export report" → feat/export-report)
# 結束碼: 0=stdout 印出 {type}/{slug},直接拿去當分支名。
# 1=參數少於兩個。補上 type 與 phrase 再重跑。
# 2=type 或 phrase 含非 ASCII 字元。先把描述翻成英文短語再重跑,
# 不要自己動手拼分支名。
# 3=phrase slug 化之後是空字串(裡面一個 a-z0-9 都沒有)。換一句英文短語再重跑。
# 錯誤訊息都印到 stderr,其中 2 與 3 印繁體中文。
set -u
if [ "$#" -lt 2 ]; then
echo "用法: slugify.sh {type} {phrase}" >&2
exit 1
fi
TYPE="$1"
shift
PHRASE="$*"
slug=$(printf '%s' "$PHRASE" | tr '[:upper:]' '[:lower:]' | sed -e 's/[^a-z0-9]/-/g' -e 's/-\{2,\}/-/g' -e 's/^-//' -e 's/-$//')
if printf '%s%s' "$TYPE" "$PHRASE" | LC_ALL=C grep -q '[^ -~]'; then
echo "錯誤: 分支名只允許 ASCII。請先把標題翻譯成英文短語,再交給 slugify.sh。" >&2
exit 2
fi
if [ -z "$slug" ]; then
echo "錯誤: 標題 slug 化後是空字串,組不出分支名。請先把標題翻譯成英文短語,再交給 slugify.sh。" >&2
exit 3
fi
printf '%s/%s\n' "$TYPE" "$slug"