Skip to content

fix: merged PRでもPRの分岐点を基準に差分を表示する - #239

Merged
kyu08 merged 8 commits into
fix/preview-merge-basefrom
fix/merged-pr-merge-base
Oct 11, 2026
Merged

kyu08 merged 8 commits into
fix/preview-merge-basefrom
fix/merged-pr-merge-base

Conversation

@kyu08

@kyu08 kyu08 commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

概要

merged PRを gh pr checkout してレビューを開始すると、merge-base(base branch, HEAD) がPRの分岐点にならず、previewとgitsignsの差分が崩れていた。GitHubが記録しているPRのbase commit(base.sha)も使って分岐点を求めるようにし、merged PRでもPR当時の差分を見られるようにする。#238(previewのmerge-base化)の上にstackしている。

変更内容

  • PR情報で baseRefOid(PRのbase commit)を受け取り、state.base_sha に保存する(lua/fude/gh.lua、lua/fude/init.lua、lua/fude/config.lua)
  • compute_merge_base は、base.sha 起点と base_ref 起点の2つのmerge-baseから分岐点を選ぶ(純粋関数 find_fork_point)
    • merge commit方式でmergeされたPRでは、PRのheadがbase branchの祖先になり、base_ref 起点のmerge-baseはHEAD自身になる(差分がゼロになる)。この場合は base.sha 起点を使う
    • それ以外は新しいほう(git merge-base --is-ancestor で判定)を使う。open PRでは、base branchをPRにmergeした後もGitHubの base.sha が古いままのことがあり、逆にローカルのbase branchが古いこともあるため、片方に固定すると分岐点が古くなる
    • base.sha のcommitがローカルに無い(未fetch)場合は、従来どおり base_ref 起点だけを使う。compute_merge_base は同期処理なので、ここでは git fetch しない
  • full PR scopeのgitsignsは、新規ファイルもmerge-baseと比較する(apply_gitsigns_base_for_buffer)
    • GitHubは新規ファイル(added)をmerge-baseとの比較で判定するので、merge-baseにはそのファイルが存在しない。一方、base branchの先端はmerged PRだとそのファイルを含むため、hunkが出なくなっていた
    • これで新規ファイルを区別する必要がなくなったので、is_new_file を削除した

テスト計画

  • 既存テスト全パス(make all)
  • 新規テスト追加: tests/fude/init_integration_spec.lua(find_fork_point の各ケース、compute_merge_base の候補とフォールバック、base_sha の保存、新規ファイルのgitsigns基準)、tests/fude/gh_spec.lua(baseRefOid の取得とJSON null)、tests/fude/diff_spec.lua(is_ancestor)
  • 一時リポジトリで、merge commit方式でmergeすると merge-base(main, HEAD) がHEAD自身になり、merge-base(base.sha, HEAD) が分岐点になることを確認した

備考

N/A


Generated with Claude Code

@kyu08
kyu08 added this pull request to stack #240 October 11, 2026 13:08
@kyu08 kyu08 changed the title fix/merged pr merge base fix: merged PRでもPRの分岐点を基準に差分を表示する Oct 11, 2026
@kyu08
kyu08 marked this pull request as ready for review October 11, 2026 13:09
Copilot AI balanced review requested due to automatic review settings October 11, 2026 13:09

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

通常ブランチ経路でbaseRefOidの要求を保証するテストが不足しています。

1 open finding
What changed in this PR

merged PRでもPR当時の分岐点を基準にpreviewとgitsignsの差分を表示する修正です。

Changes:

  • GitHubのbase commitをstateへ保存
  • 2つのmerge-baseから適切な分岐点を選択
  • gitsigns・テスト・ドキュメントを更新
File Description
lua/​fude/​init.lua 分岐点の選択とgitsigns基準を修正
lua/​fude/​gh.lua baseRefOidを取得
lua/​fude/​diff.lua ancestor判定を追加
lua/​fude/​config.lua base_sha stateを追加
tests/​fude/​init_integration_spec.lua 分岐点とgitsignsを検証
tests/​fude/​gh_spec.lua base SHAの解析を検証
tests/​fude/​diff_spec.lua ancestor判定を検証
doc/​fude.txt merged PRの差分基準を説明
CLAUDE.md アーキテクチャ記述を更新

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread lua/fude/gh.lua
return M.get_pr_by_commit(sha, callback)
end
M.run_json({ "pr", "view", "--json", "number,baseRefName,headRefName,url,state" }, callback)
M.run_json({ "pr", "view", "--json", "number,baseRefName,baseRefOid,headRefName,url,state" }, callback)

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

37b772a で修正 — gh.get_pr_info() の通常ブランチ経路で run_json の引数を捕捉し、--json のフィールドに baseRefOid が含まれることを検証するテストを追加しました。baseRefOid を外すとこのテストが落ちることも確認済みです。

Copilot AI balanced review requested due to automatic review settings October 11, 2026 13:14

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

実装とテストは整合しており、残る指摘は挙動に影響しない古いコメントの更新のみです。

1 open finding
Previously missed (1)

In code that hasn't changed since last review

Low severity 更新後の挙動に合わせてmerge_base_shaのコメントを修正

lua/​fude/​init.lua:71

この変更後も同ファイルの setup_review_autocmds 内(351行目)に「New files use base_ref, existing files use merge_base_sha」という旧仕様のコメントが残っており、実際の挙動と矛盾します。新規ファイルを含む全ファイルで merge_base_sha を使う説明へ更新してください。

🧠 Review effort: Balanced

@kyu08
kyu08 merged commit d6a25c1 into main Oct 11, 2026
9 checks passed
@kyu08
kyu08 deleted the fix/merged-pr-merge-base branch October 11, 2026 13:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants