#!/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) # 護欄: 輸入含非 ASCII 字元回傳 2;slug 化後為空回傳 3。兩者都印繁中錯誤到 stderr。 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"