@@ -8,6 +8,7 @@ import type { FeatureAccess, PlusFeatures } from '../../features';
88import { showCreatePullRequestPrompt , showGenericErrorMessage } from '../../messages' ;
99import type { RepoComparisonKey } from '../../repositories' ;
1010import { asRepoComparisonKey } from '../../repositories' ;
11+ import { getScopedCounter } from '../../system/counter' ;
1112import { formatDate , fromNow } from '../../system/date' ;
1213import { gate } from '../../system/decorators/gate' ;
1314import { debug , log , logName } from '../../system/decorators/log' ;
@@ -24,7 +25,7 @@ import { configuration } from '../../system/vscode/configuration';
2425import type { GitProviderDescriptor , GitProviderRepository } from '../gitProvider' ;
2526import type { GitProviderService } from '../gitProviderService' ;
2627import type { GitBranch } from './branch' ;
27- import { getBranchNameWithoutRemote , getNameWithoutRemote , getRemoteNameFromBranchName } from './branch.utils' ;
28+ import { getBranchNameWithoutRemote , getNameWithoutRemote , getRemoteNameFromBranchName } from './branch.utils' ;
2829import type { GitBranchReference , GitReference } from './reference' ;
2930import { isBranchReference } from './reference.utils' ;
3031import type { GitRemote } from './remote' ;
@@ -175,7 +176,9 @@ export interface RepositoryFileSystemChangeEvent {
175176 readonly uris : Uri [ ] ;
176177}
177178
178- @logName < Repository > ( ( r , name ) => `${ name } (${ r . id } )` )
179+ const instanceCounter = getScopedCounter ( ) ;
180+
181+ @logName < Repository > ( ( r , name ) => `${ name } (${ r . id } |${ r . instance } )` )
179182export class Repository implements Disposable {
180183 static formatLastFetched ( lastFetched : number , short : boolean = true ) : string {
181184 const date = new Date ( lastFetched ) ;
@@ -224,6 +227,7 @@ export class Repository implements Disposable {
224227
225228 readonly id : RepoComparisonKey ;
226229 readonly index : number ;
230+ readonly instance = instanceCounter . next ( ) ;
227231
228232 private _name : string ;
229233 get name ( ) : string {
@@ -247,7 +251,10 @@ export class Repository implements Disposable {
247251
248252 constructor (
249253 private readonly container : Container ,
250- private readonly onDidRepositoryChange : ( repo : Repository , e : RepositoryChangeEvent ) => void ,
254+ private readonly providerService : {
255+ readonly onDidRepositoryChange : EventEmitter < RepositoryChangeEvent > ;
256+ readonly onRepositoryChanged : ( repo : Repository , e : RepositoryChangeEvent ) => void ;
257+ } ,
251258 public readonly provider : GitProviderDescriptor ,
252259 public readonly folder : WorkspaceFolder | undefined ,
253260 public readonly uri : Uri ,
@@ -361,9 +368,9 @@ export class Repository implements Disposable {
361368
362369 disposables . push (
363370 watcher ,
364- watcher . onDidChange ( e => this . onRepositoryChanged ( e , uri ) ) ,
365- watcher . onDidCreate ( e => this . onRepositoryChanged ( e , uri ) ) ,
366- watcher . onDidDelete ( e => this . onRepositoryChanged ( e , uri ) ) ,
371+ watcher . onDidChange ( e => this . onRepositoryChanged ( e , uri , 'change' ) ) ,
372+ watcher . onDidCreate ( e => this . onRepositoryChanged ( e , uri , 'create' ) ) ,
373+ watcher . onDidDelete ( e => this . onRepositoryChanged ( e , uri , 'delete' ) ) ,
367374 ) ;
368375 return watcher ;
369376 }
@@ -465,7 +472,7 @@ export class Repository implements Disposable {
465472 }
466473
467474 @debug ( )
468- private onRepositoryChanged ( uri : Uri | undefined , base : Uri ) {
475+ private onRepositoryChanged ( uri : Uri | undefined , base : Uri , _reason : 'create' | 'change' | 'delete' ) {
469476 // TODO@eamodio Revisit -- as I can't seem to get this to work as a negative glob pattern match when creating the watcher
470477 if ( uri ?. path . includes ( '/fsmonitor--daemon/' ) ) {
471478 return ;
@@ -1031,7 +1038,7 @@ export class Repository implements Disposable {
10311038
10321039 this . _pendingRepoChange = this . _pendingRepoChange ?. with ( changes ) ?? new RepositoryChangeEvent ( this , changes ) ;
10331040
1034- this . onDidRepositoryChange ( this , new RepositoryChangeEvent ( this , changes ) ) ;
1041+ this . providerService . onRepositoryChanged ( this , this . _pendingRepoChange ) ;
10351042
10361043 if ( this . _suspended ) {
10371044 Logger . debug ( scope , `queueing suspended ${ this . _pendingRepoChange . toString ( true ) } ` ) ;
@@ -1049,7 +1056,11 @@ export class Repository implements Disposable {
10491056 this . _pendingRepoChange = undefined ;
10501057
10511058 Logger . debug ( `Repository(${ this . id } ) firing ${ e . toString ( true ) } ` ) ;
1052- this . _onDidChange . fire ( e ) ;
1059+ try {
1060+ this . _onDidChange . fire ( e ) ;
1061+ } finally {
1062+ this . providerService . onDidRepositoryChange . fire ( e ) ;
1063+ }
10531064 }
10541065
10551066 @debug ( )
0 commit comments