Skip to content

merged: 既に無いローカルブランチで git branch -d が exit 1 になり、「止まる条件」の表では止まる対象に読める #769

Description

@takemi-ohama

何を見つけたか

10.15.0-dev.1 のリリース後テスト(PR #766)で、配布した版の merged の「クリーンアップの手順」を、
作業ツリーとブランチを進行側が既に消した Pull Request(#766、head release/v10.15.0-dev.1)に対して通した。
手順 5 の git branch -d は次のとおり 終了コード 1 で終わる。

$ git branch -d release/v10.15.0-dev.1
error: branch 'release/v10.15.0-dev.1' not found
exit=1

「止まる条件」の表はローカルブランチについて「git branch -d <name> が 0 以外で終わる → 止まる(一覧で
示し、同意の無い対象を消さない)」と定めており、この表だけを読むと「無い」ブランチが止まる対象へ積まれる。
手順の末尾の「冪等性保証・エラー時中断・削除済み無視」が「無い」を無視する根拠になるが、表とは別の場所に
あり、-d の拒否(not fully merged)と「無い」(not found)を分ける判定の形(git show-ref --verify
先に見る、または出力の not found を読む)が書かれていない。

今回は「削除済み無視」を採って止まる箇所 0 で通った(A2 は合格)が、読み手が表だけを読むと同じ状況で 1 回止まる。

どこで見つけたか

  • plugins/ndf/skills/merged/SKILL.md「止まる条件」の表(ローカルブランチの行)と、「クリーンアップの手順」の手順 5・末尾の注意
  • PR Release: ndf v10.15.0-dev.1 #766 のリリース後テストのコメント(A2 の行)

なぜこの変更の範囲外なのか

#561 の A2(利用者の入力を求める箇所が 0)は満たしている。これは「無い」の扱いが表に無いという文書の
欠落で、A2 の合否を変えない。

直さないと何が起きるか

AGENTS.md が求める「失敗時の終了コードと出力を確かめる」の観点で、git branch -d の 2 つの非 0
(拒否と不在)が同じ扱いに読める。進行側が先に消した Pull Request(release ブランチ・cross-review の後片付け
など)で、止まる対象に「無い」ブランチが並び、A2 の 0 回が守られない実行が出る。対処は手順 5 に
「先に git show-ref --verify --quiet refs/heads/<name> で存在を見て、無ければ『削除済み』として報告へ載せ、
止まる対象へ積まない」を 1 行足すこと。

由来

PR #76610.15.0-dev.1 のリリース後テスト、A2 の判定)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ndf-skillNDF の Skill 本体bugSomething isn't workingpriority: low文書のみ・低頻度など、余力があれば対応する

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions