#!/usr/bin/env sh # report-template.sh — 解析報表範本的位置(供 jsc-log:report 呼叫)。 # 用法: # report-template.sh resolve {daily|weekly|monthly|yearly} [起始目錄] # report-template.sh list [起始目錄] # # 解析順序:工作目錄的 .jsc/templates/report-{period}.md 優先,沒有才用技能自帶的 # templates/report-{period}.md。專案要自訂報表格式時,放一份同名檔案就換掉範本, # 不必改技能。起始目錄省略時用目前工作目錄。 # # 輸出(resolve):{絕對路徑}{project|skill} # 輸出(list):每種期間一行 {period}{絕對路徑}{project|skill} # # 結束碼: 0=找到 2=用法錯誤 3=兩處都找不到範本(技能自帶的那份被刪了) set -eu HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) SKILL_TPL=$(CDPATH= cd -- "$HERE/.." && pwd)/templates TAB=$(printf '\t') usage() { echo "用法:report-template.sh {resolve {daily|weekly|monthly|yearly} [起始目錄]|list [起始目錄]}" >&2 exit 2 } resolve_one() { # $1=period $2=起始目錄 _p="$1"; _d="$2" _proj="$_d/.jsc/templates/report-$_p.md" if [ -f "$_proj" ]; then printf '%s%s%s\n' "$_proj" "$TAB" project return 0 fi _skill="$SKILL_TPL/report-$_p.md" if [ -f "$_skill" ]; then printf '%s%s%s\n' "$_skill" "$TAB" skill return 0 fi return 3 } cmd="${1:-}" case "$cmd" in resolve) period="${2:-}" case "$period" in daily|weekly|monthly|yearly) ;; *) usage ;; esac dir="${3:-$PWD}" dir=$(CDPATH= cd -- "$dir" 2>/dev/null && pwd) || { echo "找不到目錄:${3:-$PWD}" >&2; exit 2; } resolve_one "$period" "$dir" || { echo "找不到 report-$period.md:$dir/.jsc/templates/ 與 $SKILL_TPL 都沒有" >&2 exit 3 } ;; list) dir="${2:-$PWD}" dir=$(CDPATH= cd -- "$dir" 2>/dev/null && pwd) || { echo "找不到目錄:${2:-$PWD}" >&2; exit 2; } rc=0 for p in daily weekly monthly yearly; do out=$(resolve_one "$p" "$dir") || { printf '%s\t-\tmissing\n' "$p"; rc=3; continue; } printf '%s\t%s\n' "$p" "$out" done exit "$rc" ;; *) usage ;; esac