`checkGitHubForPrBranch` associates branches with stale closed PRs via their tracked upstream (e.g. branches tracking `origin/dev`)
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
Dieses Issue wurde noch nicht bewertet.
Beschreibung
Info:
- Extension version: 0.136.0
- VSCode Version: 1.116.0 (Universal)
- OS: macOS 26.3.1
- Repository Clone Configuration: single repository
- GitHub Product: GitHub.com
Summary
ReviewManager.checkGitHubForPrBranch looks up PRs by branch.upstream.name and writes the result to branch.<name>.github-pr-owner-number with no state === 'OPEN' guard. For any local branch that tracks a shared upstream like origin/dev, this resolves to whatever closed PR ever used head=dev on that repo, and the stale mapping persists permanently (because the write only fires when no metadata exists).
Symptoms: the GitHub Pull Requests panel logs This PR is no longer valid / Unable to resolve PR #..., the PR view won't open for the branch, and git config branch.<name>.github-pr-owner-number points to an unrelated closed PR.
Steps to Reproduce:
Prerequisite: a repository with at least one CLOSED PR whose headRefName is a commonly-tracked base branch name (dev, main, etc.). In my case the offending PR was closed without merge in October 2024.
- Create a new local branch tracking the base ref:
(Equivalent triggers:git checkout -b my-feature origin/devgit worktree add <dir> -b my-feature origin/dev, orgit branch --track my-feature origin/dev.) This setsbranch.my-feature.merge = refs/heads/devandbranch.my-feature.remote = origin. - Open the repo in VS Code with the GitHub Pull Requests extension enabled.
- Within a few seconds (on activation or the 5-min poll),
checkGitHubForPrBranchfires. - Inspect config:
git config --get branch.my-feature.github-pr-owner-number— it references an old closed PR whoseheadRefNamewasdev.
Subsequently, even after pushing my-feature with -u (which corrects branch.my-feature.merge to refs/heads/my-feature), the stale PR mapping persists because the write path is gated on "no metadata exists". The PR view remains broken until the config entry is manually unset.
Expected
No mapping should be written. A local branch tracking origin/dev has no PR reachable via its upstream's head ref name — the branch's own (future) remote ref would be my-feature, not dev.
Actual
Output log shows:
[Review+0] Found matching pull request metadata for current branch my-feature. Repo: owner/repo PR: <OLD_CLOSED_PR_NUMBER>
[Review+0] Resolving pull request
[Review+0] This PR is no longer valid
[Review+0] Unable to resolve PR #<OLD_CLOSED_PR_NUMBER>
The stale mapping also spreads to any branch created from origin/dev before being pushed with its own name. In my workspace 17 distinct branches ended up with this mapping over a few months of normal worktree-based development.
Root cause
All permalinks pinned to 6596ede (current main).
ReviewManager.checkGitHubForPrBranchcallsgetUpstreamUrlAndNameto extractupstreamBranchName.getUpstreamUrlAndNamereturnsbranch.upstream.namewhen upstream is populated, or falls back tobranch.<name>.mergeminus therefs/heads/prefix. For a branch trackingorigin/dev, both paths yieldupstreamBranchName = "dev".checkGitHubForPrBranchpasses that togetMatchingPullRequestMetadataFromGitHub, which dispatches todoGetMatchingPullRequestMetadataFromGitHub→GitHubRepository.getPullRequestForBranch("dev", headOwner).- The GraphQL query
PullRequestForHeadruns withheadRefName: "dev"— no state filter. - Client-side filter at
githubRepository.ts#L752:
If no matching open PR exists, returnsconst mostRecentOrOpenPr = prs.find(pr => pr.state.toLowerCase() === 'open') ?? prs[0];prs[0]— any closed PR that ever usedhead=devcan match. PullRequestGitHelper.associateBranchWithPullRequestwrites the stale mapping to git config.
The semantic mistake: upstreamBranchName is treated as "this branch's name on the remote", but for a branch tracking a base branch (a very common pattern — e.g. git worktree add -b X origin/dev), it's actually the base branch's name on the remote, not the feature branch's future name.
Proposed fix
Option 1: in checkGitHubForPrBranch (or inside getMatchingPullRequestMetadataFromGitHub), skip the GitHub lookup when upstreamBranchName !== branch.name. A branch whose upstream ref name differs from its local name is tracking a base branch, not its own remote counterpart, and has no PR discoverable via that name.
Option 2: add a state === 'OPEN' guard to getPullRequestForBranch's client-side filter. This prevents closed-PR pollution even if the "different name" check is missed. It won't help in the rare case that an open PR happens to exist on the shared upstream.
Either fix should also address the same pattern in FolderRepositoryManager.associateLocalBranchesWithPRsOnFirstActivation.
Related
- #6711 covers the "same branch name reused after a PR closes" variant of the stale-metadata family. This issue is a distinct, broader trigger — branches that track a base branch rather than reusing a head ref name.
- #6134 first flagged
github-pr-owner-numberconfig-level misbehavior.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 2.6k
- Forks
- 805
- Ø Merge
- 1 T. 13 Std.
- Gemergte PRs (30 T.)
- 38
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus microsoft/vscode-pull-request-github
-
Issue 3 — DocumentationOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
microsoft/vscode-pull-request-github#8792 ·
Maintainer antworten meist innerhalb von 1 Tag
-
GyhOffen~spam
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 15/100
microsoft/vscode-pull-request-github#9053 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
PR description view doesn't show PR eventsEvtl. vergeben @alexr00 hat das vor 3 Tagen übernommen. Offen
microsoft/vscode-pull-request-github#9051 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
Test "Update Stack"Evtl. vergeben @benvillalobos hat das vor 1 Tag übernommen. Offentestplan-item
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 30/100
microsoft/vscode-pull-request-github#9046 · 2 zugewiesene Personen ·
Maintainer antworten meist innerhalb von 1 Tag
-
Colours are off for sub-buttons under Create Merge CommitEvtl. vergeben @alexr00 hat das vor 7 Tagen übernommen. Offeninfo-needed
microsoft/vscode-pull-request-github#9019 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in microsoft/vscode-pull-request-github
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
better-auth/better-auth#11723 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
area: docs difficulty: easy documentation good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
Worker-Erstellung bricht langsame Git-Worktree-Checkouts nach 20 Sekunden abEvtl. vergeben @KajoVanBuyten hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 69/100
AgentSystemLabs/agent-office#367 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
pierrecomputer/pierre#1187 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area: frontend bug
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 85/100
snapotter-hq/SnapOtter#2425 ·
Maintainer antworten meist innerhalb von 1 Tag