#!/usr/bin/env sh # worklog-target.sh: 由已算好的 hash 組出 worklog wiki 目標頁名稱,並算出工作週的週五。 # hash 一律由 jsc-gitea/tools/hash-id 算出後傳入,本腳本不再自行計算 SHA-1。 # 用法: # worklog-target.sh [page|contents|all] # worklog-target.sh friday [基準日期 yyyy-MM-dd] # # friday 印出一行 yyyy-MM-dd:基準日期所在工作週的週五(基準日期省略時用今天)。 # 週界不在這裡算,一律問 report-range.sh weekly——週一起算的 ISO 週定義只有那一支說了算, # 兩邊各算一次就會在跨月、跨年的那一週各走各的。這裡只做「週一加四天」這一步。 # # 結束碼: 0=成功 2=用法錯誤 4=系統的 date 不支援日期運算(由 report-range.sh 判定) set -eu HERE=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) usage() { cat >&2 <<'EOF' 用法: worklog-target.sh [page|contents|all] 組出 LOG_{HASH} 與 LOG_CONTENTS worklog-target.sh friday [yyyy-MM-dd] 印出該工作週的週五日期 結束碼: 0=成功 2=用法錯誤 4=系統的 date 不支援日期運算 EOF exit 2 } add_days() { # $1=yyyy-MM-dd $2=要加的天數 if date -d "$1 +$2 days" +%Y-%m-%d >/dev/null 2>&1; then date -d "$1 +$2 days" +%Y-%m-%d return 0 fi if date -j -f %Y-%m-%d -v"+$2d" "$1" +%Y-%m-%d >/dev/null 2>&1; then date -j -f %Y-%m-%d -v"+$2d" "$1" +%Y-%m-%d return 0 fi echo "系統的 date 不支援日期運算,算不出工作週的週五" >&2 exit 4 } [ "$#" -ge 1 ] || usage [ "$#" -le 2 ] || usage if [ "$1" = friday ]; then base="${2:-}" if [ -n "$base" ]; then case "$base" in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]) ;; *) echo "基準日期格式要是 yyyy-MM-dd:$base" >&2; exit 2 ;; esac fi range=$(sh "$HERE/report-range.sh" weekly ${base:+"$base"}) || exit $? monday=$(printf '%s\n' "$range" | cut -f1) add_days "$monday" 4 exit 0 fi hash=$1 field=${2:-page} if [ -z "$hash" ]; then usage fi page="LOG_${hash}" contents='LOG_CONTENTS' case "$field" in page) printf '%s\n' "$page" ;; contents) printf '%s\n' "$contents" ;; all) printf 'PAGE=%s\n' "$page" printf 'CONTENTS=%s\n' "$contents" ;; *) usage ;; esac