Skip to content

Commit 96adb0b

Browse files
authored
New "check out PR by number" is confusing (#8467)
* New "check out PR by number" is confusing Fixes #8455 * pr feedback
1 parent 3c4f7ed commit 96adb0b

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

src/commands.ts

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,31 +1647,12 @@ ${contents}
16471647
quickPick.matchOnDescription = true;
16481648
quickPick.matchOnDetail = true;
16491649
quickPick.show();
1650-
quickPick.busy = true;
16511650

16521651
let acceptDisposable: vscode.Disposable | undefined;
16531652
let hideDisposable: vscode.Disposable | undefined;
16541653

1655-
// Fetch all open PRs (lightweight query)
16561654
try {
1657-
const prs = await githubRepo.repo.getPullRequestNumbers();
1658-
if (!prs) {
1659-
return vscode.window.showErrorMessage(vscode.l10n.t('Failed to fetch pull requests'));
1660-
}
1661-
// Sort PRs by number in descending order (most recent first)
1662-
const sortedPRs = prs.sort((a, b) => b.number - a.number);
1663-
const prItems: (vscode.QuickPickItem & { prNumber: number })[] = sortedPRs.map(pr => ({
1664-
label: `#${pr.number} ${pr.title}`,
1665-
description: `by @${pr.author.login}`,
1666-
prNumber: pr.number
1667-
}));
1668-
1669-
quickPick.items = prItems;
1670-
quickPick.busy = false;
1671-
1672-
// Handle selection
1673-
1674-
const selected = await new Promise<{ selectedItem: (vscode.QuickPickItem & { prNumber?: number }) | undefined, selectedString: string | undefined }>((resolve) => {
1655+
const selectedPromise = new Promise<{ selectedItem: (vscode.QuickPickItem & { prNumber?: number }) | undefined, selectedString: string | undefined }>((resolve) => {
16751656
acceptDisposable = quickPick.onDidAccept(() => {
16761657
let selectedString: string | undefined;
16771658
let selectedItem: (vscode.QuickPickItem & { prNumber?: number }) | undefined;
@@ -1689,30 +1670,49 @@ ${contents}
16891670
hideDisposable = quickPick.onDidHide(() => resolve({ selectedItem: undefined, selectedString: undefined }));
16901671
});
16911672

1673+
const prs = await githubRepo.repo.getPullRequestNumbers();
1674+
if (!prs) {
1675+
return vscode.window.showErrorMessage(vscode.l10n.t('Failed to fetch pull requests'));
1676+
}
1677+
// Sort PRs by number in descending order (most recent first)
1678+
const sortedPRs = prs.sort((a, b) => b.number - a.number);
1679+
const prItems: (vscode.QuickPickItem & { prNumber: number })[] = sortedPRs.map(pr => ({
1680+
label: `#${pr.number} ${pr.title}`,
1681+
description: `by @${pr.author.login}`,
1682+
prNumber: pr.number
1683+
}));
1684+
1685+
quickPick.items = prItems;
1686+
const selected = await selectedPromise;
1687+
quickPick.busy = true;
1688+
16921689
if (!selected.selectedItem && !selected.selectedString) {
16931690
return;
16941691
}
1695-
quickPick.busy = true;
16961692
let prModel: PullRequestModel | undefined;
16971693

16981694
// Check if user selected from the list or typed a custom value
16991695
if (selected.selectedString) {
17001696
// User typed a PR number or URL
17011697
const parseResult = validateAndParseInput(selected.selectedString, githubRepo.repo.remote.owner, githubRepo.repo.remote.repositoryName);
1702-
if (!parseResult.isValid) {
1698+
if (!parseResult.isValid && !selected.selectedItem) {
17031699
return vscode.window.showErrorMessage(parseResult.errorMessage || vscode.l10n.t('Invalid pull request number or URL'));
17041700
}
1705-
// The user may have just entered part of a number and meant to select it from the list
1706-
const selectedItemNumber = selected.selectedItem?.prNumber;
1707-
if (selectedItemNumber !== undefined) {
1708-
const parsedDigits = parseResult.prNumber.toString();
1709-
const selectedDigits = selectedItemNumber.toString();
1710-
if (selectedDigits.length > parsedDigits.length && selectedDigits.startsWith(parsedDigits)) {
1711-
parseResult.prNumber = selectedItemNumber;
1701+
1702+
if (parseResult.prNumber !== undefined) {
1703+
// The user may have just entered part of a number and meant to select it from the list
1704+
const selectedItemNumber = selected.selectedItem?.prNumber;
1705+
if (selectedItemNumber !== undefined) {
1706+
const parsedDigits = parseResult.prNumber.toString();
1707+
const selectedDigits = selectedItemNumber.toString();
1708+
if (selectedDigits.length > parsedDigits.length && selectedDigits.startsWith(parsedDigits)) {
1709+
parseResult.prNumber = selectedItemNumber;
1710+
}
17121711
}
1712+
prModel = await githubRepo.manager.fetchById(githubRepo.repo, parseResult.prNumber);
17131713
}
1714-
prModel = await githubRepo.manager.fetchById(githubRepo.repo, parseResult.prNumber);
1715-
} else if (selected.selectedItem?.prNumber) {
1714+
}
1715+
if (selected.selectedItem?.prNumber && !prModel) {
17161716
// User selected from the list
17171717
prModel = await githubRepo.manager.fetchById(githubRepo.repo, selected.selectedItem.prNumber);
17181718
}

0 commit comments

Comments
 (0)