diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index e6eed9607f7..0e2b37af5b7 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -1502,9 +1502,16 @@ export class Repository { return parseGitChanges(this.repositoryRoot, gitResult.stdout); } - async getMergeBase(ref1: string, ref2: string): Promise { + async getMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise { try { - const args = ['merge-base', ref1, ref2]; + const args = ['merge-base']; + if (refs.length !== 0) { + args.push('--octopus'); + args.push(...refs); + } + + args.push(ref1, ref2); + const result = await this.exec(args); return result.stdout.trim(); diff --git a/extensions/git/src/historyProvider.ts b/extensions/git/src/historyProvider.ts index 9bb627dd2fd..22cbe9c493d 100644 --- a/extensions/git/src/historyProvider.ts +++ b/extensions/git/src/historyProvider.ts @@ -256,11 +256,7 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec return undefined; } - let refsMergeBase = refNames[0]; - for (let index = 1; index < refNames.length; index++) { - refsMergeBase = await this.repository.getMergeBase(refsMergeBase, refNames[index]) ?? refsMergeBase; - } - + const refsMergeBase = await this.repository.getMergeBase(refNames[0], refNames[1], ...refNames.slice(2)); return refsMergeBase; } diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 3863e748726..deec56f9eaa 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -1112,8 +1112,8 @@ export class Repository implements Disposable { return this.run(Operation.Diff, () => this.repository.diffBetweenShortStat(ref1, ref2)); } - getMergeBase(ref1: string, ref2: string): Promise { - return this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2)); + getMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise { + return this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2, ...refs)); } async hashObject(data: string): Promise {