@@ -7,8 +7,16 @@ import type { GitReference } from '../../../../../git/models/reference';
77import { deletedOrMissing } from '../../../../../git/models/revision' ;
88import type { GitTag } from '../../../../../git/models/tag' ;
99import { createReference } from '../../../../../git/utils/reference.utils' ;
10- import { isSha , isShaLike , isUncommitted , isUncommittedParent } from '../../../../../git/utils/revision.utils' ;
10+ import {
11+ createRevisionRange ,
12+ isSha ,
13+ isShaLike ,
14+ isUncommitted ,
15+ isUncommittedParent ,
16+ } from '../../../../../git/utils/revision.utils' ;
1117import { log } from '../../../../../system/decorators/log' ;
18+ import { Logger } from '../../../../../system/logger' ;
19+ import { getLogScope } from '../../../../../system/logger.scope' ;
1220import type { GitHubGitProviderInternal } from '../githubGitProvider' ;
1321import { stripOrigin } from '../githubGitProvider' ;
1422
@@ -23,6 +31,34 @@ export class RefsGitSubProvider implements GitRefsSubProvider {
2331 private readonly provider : GitHubGitProviderInternal ,
2432 ) { }
2533
34+ @log ( )
35+ async getMergeBase (
36+ repoPath : string ,
37+ ref1 : string ,
38+ ref2 : string ,
39+ _options ?: { forkPoint ?: boolean } ,
40+ ) : Promise < string | undefined > {
41+ if ( repoPath == null ) return undefined ;
42+
43+ const scope = getLogScope ( ) ;
44+
45+ const { metadata, github, session } = await this . provider . ensureRepositoryContext ( repoPath ) ;
46+
47+ try {
48+ const result = await github . getComparison (
49+ session . accessToken ,
50+ metadata . repo . owner ,
51+ metadata . repo . name ,
52+ createRevisionRange ( stripOrigin ( ref1 ) , stripOrigin ( ref2 ) , '...' ) ,
53+ ) ;
54+ return result ?. merge_base_commit ?. sha ;
55+ } catch ( ex ) {
56+ Logger . error ( ex , scope ) ;
57+ debugger ;
58+ return undefined ;
59+ }
60+ }
61+
2662 @log ( )
2763 async getReference ( repoPath : string , ref : string ) : Promise < GitReference | undefined > {
2864 if ( ! ref || ref === deletedOrMissing ) return undefined ;
0 commit comments