Skip to content

Commit 0786762

Browse files
committed
Handle 0 length arrays
1 parent f4f5a3d commit 0786762

1 file changed

Lines changed: 27 additions & 11 deletions

File tree

src/commands.ts

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -563,16 +563,30 @@ export function registerCommands(
563563
}
564564

565565
/**
566-
* Get the folder manager for a repository based on metadata.
566+
* Get the folder manager and GitHub repository for a repository based on metadata.
567567
* Falls back to the first folder manager if metadata is not provided or repository not found.
568568
* @param metadata Session metadata containing owner and repo information
569-
* @returns FolderRepositoryManager or undefined if no folder managers exist
569+
* @returns Object with folderManager and githubRepo, or undefined if no folder managers exist
570570
*/
571-
function getFolderManagerFromMetadata(metadata: SessionMetadata | undefined): FolderRepositoryManager | undefined {
571+
function getFolderManagerFromMetadata(metadata: SessionMetadata | undefined): { folderManager: FolderRepositoryManager; githubRepo: GitHubRepository } | undefined {
572572
if (metadata?.owner && metadata?.name) {
573-
return reposManager.getManagerForRepository(metadata.owner, metadata.name) ?? reposManager.folderManagers[0];
573+
const folderManager = reposManager.getManagerForRepository(metadata.owner, metadata.name) ?? reposManager.folderManagers[0];
574+
if (!folderManager || folderManager.gitHubRepositories.length === 0) {
575+
return undefined;
576+
}
577+
const githubRepo = folderManager.gitHubRepositories.find(
578+
repo => repo.remote.owner === metadata.owner && repo.remote.repositoryName === metadata.name
579+
) ?? folderManager.gitHubRepositories[0];
580+
return { folderManager, githubRepo };
574581
}
575-
return reposManager.folderManagers.length > 0 ? reposManager.folderManagers[0] : undefined;
582+
if (reposManager.folderManagers.length === 0) {
583+
return undefined;
584+
}
585+
const folderManager = reposManager.folderManagers[0];
586+
if (folderManager.gitHubRepositories.length === 0) {
587+
return undefined;
588+
}
589+
return { folderManager, githubRepo: folderManager.gitHubRepositories[0] };
576590
}
577591

578592
function contextHasPath(ctx: OverviewContext | { path: string } | undefined): ctx is { path: string } {
@@ -604,11 +618,12 @@ export function registerCommands(
604618
return vscode.window.showErrorMessage(vscode.l10n.t('No pull request number found in context path.'));
605619
}
606620
// Use metadata to find the correct repository if available
607-
const folderManager = getFolderManagerFromMetadata(metadata);
608-
if (!folderManager) {
621+
const result = getFolderManagerFromMetadata(metadata);
622+
if (!result) {
609623
return vscode.window.showErrorMessage(vscode.l10n.t('Unable to find repository manager.'));
610624
}
611-
const pullRequest = await folderManager.fetchById(folderManager.gitHubRepositories[0], Number(prNumber));
625+
const { folderManager, githubRepo } = result;
626+
const pullRequest = await folderManager.fetchById(githubRepo, Number(prNumber));
612627
if (!pullRequest) {
613628
return vscode.window.showErrorMessage(vscode.l10n.t('Unable to find pull request #{0}', prNumber.toString()));
614629
}
@@ -646,11 +661,12 @@ export function registerCommands(
646661
task.report({ increment: 30 });
647662

648663
// Use metadata to find the correct repository if available
649-
const folderManager = getFolderManagerFromMetadata(metadata);
650-
if (!folderManager) {
664+
const result = getFolderManagerFromMetadata(metadata);
665+
if (!result) {
651666
return vscode.window.showErrorMessage(vscode.l10n.t('Unable to find repository manager.'));
652667
}
653-
const pullRequest = await folderManager.fetchById(folderManager.gitHubRepositories[0], Number(prNumber));
668+
const { folderManager, githubRepo } = result;
669+
const pullRequest = await folderManager.fetchById(githubRepo, Number(prNumber));
654670
if (!pullRequest) {
655671
return vscode.window.showErrorMessage(vscode.l10n.t('Unable to find pull request #{0}', prNumber.toString()));
656672
}

0 commit comments

Comments
 (0)