SCM - improve merge-base detection (#216823)

This commit is contained in:
Ladislau Szomoru 2024-06-21 17:53:13 +02:00 committed by GitHub
parent f4f94df15e
commit 68ca9a7f4c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 9 deletions

View File

@ -1502,9 +1502,16 @@ export class Repository {
return parseGitChanges(this.repositoryRoot, gitResult.stdout);
}
async getMergeBase(ref1: string, ref2: string): Promise<string | undefined> {
async getMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise<string | undefined> {
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();

View File

@ -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;
}

View File

@ -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<string | undefined> {
return this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2));
getMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise<string | undefined> {
return this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2, ...refs));
}
async hashObject(data: string): Promise<string> {