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); 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 { 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); const result = await this.exec(args);
return result.stdout.trim(); return result.stdout.trim();

View File

@ -256,11 +256,7 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec
return undefined; return undefined;
} }
let refsMergeBase = refNames[0]; const refsMergeBase = await this.repository.getMergeBase(refNames[0], refNames[1], ...refNames.slice(2));
for (let index = 1; index < refNames.length; index++) {
refsMergeBase = await this.repository.getMergeBase(refsMergeBase, refNames[index]) ?? refsMergeBase;
}
return refsMergeBase; return refsMergeBase;
} }

View File

@ -1112,8 +1112,8 @@ export class Repository implements Disposable {
return this.run(Operation.Diff, () => this.repository.diffBetweenShortStat(ref1, ref2)); return this.run(Operation.Diff, () => this.repository.diffBetweenShortStat(ref1, ref2));
} }
getMergeBase(ref1: string, ref2: string): Promise<string | undefined> { getMergeBase(ref1: string, ref2: string, ...refs: string[]): Promise<string | undefined> {
return this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2)); return this.run(Operation.MergeBase, () => this.repository.getMergeBase(ref1, ref2, ...refs));
} }
async hashObject(data: string): Promise<string> { async hashObject(data: string): Promise<string> {