You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
assert_no_existing_tag() の git tag --list "v${_norm}" (bin/bump-version:170)
assert_clean_worktree() の git status --porcelain (bin/bump-version:175)
set -e が有効なため、コマンド置換が非ゼロ終了した時点でスクリプト全体が即座にabortし、制御された die(...) を経由せず生の fatal: not a git repository エラーで異常終了する。documented --tag モードが brittle になり、release-packaging(tarball 展開環境でリリース準備など)のシナリオでエラー報告経路が不十分。
推奨対応
各 git 呼び出しを if ガード + 明示的な終了判定に変更し、git リポ外検出時に die "--tag requires a git repository (current directory is not a git worktree)" のような制御されたエラーを返す。
実装例:
assert_clean_worktree() {
if! _status=$(git status --porcelain 2>/dev/null);then
die "--tag requires a git repository"fi
[ -z"$_status" ] || die "working tree has uncommitted changes; commit or stash before --tag"
}
背景
v0.3.0 サイクルの PR #26 codex review (P2) で検出された
bin/bump-versionのエラーハンドリング改善候補。現状の問題
bin/bump-version --tagを git リポジトリ外(export された tarball や.gitを含まないコピー先)で実行すると、以下の git 呼び出しがコマンド置換内で失敗する:assert_no_existing_tag()のgit tag --list "v${_norm}"(bin/bump-version:170)assert_clean_worktree()のgit status --porcelain(bin/bump-version:175)set -eが有効なため、コマンド置換が非ゼロ終了した時点でスクリプト全体が即座にabortし、制御されたdie(...)を経由せず生のfatal: not a git repositoryエラーで異常終了する。documented--tagモードが brittle になり、release-packaging(tarball 展開環境でリリース準備など)のシナリオでエラー報告経路が不十分。推奨対応
各 git 呼び出しを
ifガード + 明示的な終了判定に変更し、git リポ外検出時にdie "--tag requires a git repository (current directory is not a git worktree)"のような制御されたエラーを返す。実装例:
または、
_ARG_TAG -eq 1時の先頭でgit rev-parse --git-dir >/dev/null 2>&1 || die "..."を実行してから各アサーションを進める方式。想定影響範囲
bin/bump-version(assert_no_existing_tag/assert_clean_worktree/ 可能ならcreate_git_tagも同様のガードを追加)tests/bump_version.bats(git リポ外で--tag実行時の制御されたエラーを検証するテストを追加)参照
d370cb487ee6e36c34f0ab67f9c19fc91a75b8d0(cycle/v0.3.0)tests/bump_version.batsL54-L67 で検証済み(dry-run は git 操作なし)、本件は--dry-run非指定時の挙動サイクル
v0.3.0 サイクルの Operations Phase レビューで検出された後続対応候補。v0.4.0 以降のサイクルで対応予定。
docs/release.mdで--tagは Construction Phase では非推奨運用が明記されているため、v0.3.0 リリース自体には影響なし。