diff --git a/extensions/github/src/historyItemDetailsProvider.ts b/extensions/github/src/historyItemDetailsProvider.ts index 1a5d58a1c52..9a267b9e844 100644 --- a/extensions/github/src/historyItemDetailsProvider.ts +++ b/extensions/github/src/historyItemDetailsProvider.ts @@ -114,7 +114,8 @@ export class GitHubSourceControlHistoryItemDetailsProvider implements SourceCont return undefined; } - const descriptor = getRepositoryDefaultRemote(repository); + // upstream -> origin -> first + const descriptor = getRepositoryDefaultRemote(repository, ['upstream', 'origin']); if (!descriptor) { this._logger.trace(`[GitHubSourceControlHistoryItemDetailsProvider][provideAvatar] Repository does not have a GitHub remote.`); return undefined; @@ -206,7 +207,8 @@ export class GitHubSourceControlHistoryItemDetailsProvider implements SourceCont } async provideHoverCommands(repository: Repository): Promise { - const url = getRepositoryDefaultRemoteUrl(repository); + // origin -> upstream -> first + const url = getRepositoryDefaultRemoteUrl(repository, ['origin', 'upstream']); if (!url) { return undefined; } @@ -220,7 +222,8 @@ export class GitHubSourceControlHistoryItemDetailsProvider implements SourceCont } async provideMessageLinks(repository: Repository, message: string): Promise { - const descriptor = getRepositoryDefaultRemote(repository); + // upstream -> origin -> first + const descriptor = getRepositoryDefaultRemote(repository, ['upstream', 'origin']); if (!descriptor) { return undefined; } diff --git a/extensions/github/src/util.ts b/extensions/github/src/util.ts index d2ccc426170..f7f54ec5f3f 100644 --- a/extensions/github/src/util.ts +++ b/extensions/github/src/util.ts @@ -74,7 +74,7 @@ export function repositoryHasGitHubRemote(repository: Repository) { return !!repository.state.remotes.find(remote => remote.fetchUrl ? getRepositoryFromUrl(remote.fetchUrl) : undefined); } -export function getRepositoryDefaultRemoteUrl(repository: Repository): string | undefined { +export function getRepositoryDefaultRemoteUrl(repository: Repository, order: string[]): string | undefined { const remotes = repository.state.remotes .filter(remote => remote.fetchUrl && getRepositoryFromUrl(remote.fetchUrl)); @@ -82,15 +82,20 @@ export function getRepositoryDefaultRemoteUrl(repository: Repository): string | return undefined; } - // origin -> upstream -> first - const remote = remotes.find(remote => remote.name === 'origin') - ?? remotes.find(remote => remote.name === 'upstream') - ?? remotes[0]; + for (const name of order) { + const remote = remotes + .find(remote => remote.name === name); - return remote.fetchUrl; + if (remote) { + return remote.fetchUrl; + } + } + + // Fallback to first remote + return remotes[0].fetchUrl; } -export function getRepositoryDefaultRemote(repository: Repository): { owner: string; repo: string } | undefined { - const fetchUrl = getRepositoryDefaultRemoteUrl(repository); +export function getRepositoryDefaultRemote(repository: Repository, order: string[]): { owner: string; repo: string } | undefined { + const fetchUrl = getRepositoryDefaultRemoteUrl(repository, order); return fetchUrl ? getRepositoryFromUrl(fetchUrl) : undefined; }