@@ -19,7 +19,6 @@ import { ApiRepository } from './api/api1';
19
19
import { IRemoteSourcePublisherRegistry } from './remotePublisher' ;
20
20
import { IPostCommitCommandsProviderRegistry } from './postCommitCommands' ;
21
21
import { IBranchProtectionProviderRegistry } from './branchProtection' ;
22
- import { ObservableSet } from './observable' ;
23
22
24
23
class RepositoryPick implements QuickPickItem {
25
24
@memoize get label ( ) : string {
@@ -93,6 +92,42 @@ interface OpenRepository extends Disposable {
93
92
repository : Repository ;
94
93
}
95
94
95
+ class ClosedRepositoriesManager {
96
+
97
+ private _repositories : Set < string > ;
98
+ get repositories ( ) : string [ ] {
99
+ return [ ...this . _repositories . values ( ) ] ;
100
+ }
101
+
102
+ constructor ( private readonly workspaceState : Memento ) {
103
+ this . _repositories = new Set < string > ( workspaceState . get < string [ ] > ( 'closedRepositories' , [ ] ) ) ;
104
+ this . onDidChangeRepositories ( ) ;
105
+ }
106
+
107
+ addRepository ( repository : string ) : void {
108
+ this . _repositories . add ( repository ) ;
109
+ this . onDidChangeRepositories ( ) ;
110
+ }
111
+
112
+ deleteRepository ( repository : string ) : boolean {
113
+ const result = this . _repositories . delete ( repository ) ;
114
+ if ( result ) {
115
+ this . onDidChangeRepositories ( ) ;
116
+ }
117
+
118
+ return result ;
119
+ }
120
+
121
+ isRepositoryClosed ( repository : string ) : boolean {
122
+ return this . _repositories . has ( repository ) ;
123
+ }
124
+
125
+ private onDidChangeRepositories ( ) : void {
126
+ this . workspaceState . update ( 'closedRepositories' , [ ...this . _repositories . values ( ) ] ) ;
127
+ commands . executeCommand ( 'setContext' , 'git.closedRepositoryCount' , this . _repositories . size ) ;
128
+ }
129
+ }
130
+
96
131
export class Model implements IBranchProtectionProviderRegistry , IRemoteSourcePublisherRegistry , IPostCommitCommandsProviderRegistry , IPushErrorHandlerRegistry {
97
132
98
133
private _onDidOpenRepository = new EventEmitter < Repository > ( ) ;
@@ -170,9 +205,9 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
170
205
return this . _parentRepositories ;
171
206
}
172
207
173
- private _closedRepositories : ObservableSet < string > ;
208
+ private _closedRepositoriesManager : ClosedRepositoriesManager ;
174
209
get closedRepositories ( ) : string [ ] {
175
- return [ ...this . _closedRepositories . values ( ) ] ;
210
+ return [ ...this . _closedRepositoriesManager . repositories ] ;
176
211
}
177
212
178
213
/**
@@ -187,10 +222,9 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
187
222
188
223
private disposables : Disposable [ ] = [ ] ;
189
224
190
- constructor ( readonly git : Git , private readonly askpass : Askpass , private globalState : Memento , private workspaceState : Memento , private logger : LogOutputChannel , private telemetryReporter : TelemetryReporter ) {
191
- this . _closedRepositories = new ObservableSet < string > ( workspaceState . get < string [ ] > ( 'closedRepositories' , [ ] ) ) ;
192
- this . _closedRepositories . onDidChange ( this . onDidChangeClosedRepositories , this , this . disposables ) ;
193
- this . onDidChangeClosedRepositories ( ) ;
225
+ constructor ( readonly git : Git , private readonly askpass : Askpass , private globalState : Memento , readonly workspaceState : Memento , private logger : LogOutputChannel , private telemetryReporter : TelemetryReporter ) {
226
+ // Repositories managers
227
+ this . _closedRepositoriesManager = new ClosedRepositoriesManager ( workspaceState ) ;
194
228
195
229
workspace . onDidChangeWorkspaceFolders ( this . onDidChangeWorkspaceFolders , this , this . disposables ) ;
196
230
window . onDidChangeVisibleTextEditors ( this . onDidChangeVisibleTextEditors , this , this . disposables ) ;
@@ -379,11 +413,6 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
379
413
openRepositoriesToDispose . forEach ( r => r . dispose ( ) ) ;
380
414
}
381
415
382
- private onDidChangeClosedRepositories ( ) : void {
383
- this . workspaceState . update ( 'closedRepositories' , [ ...this . _closedRepositories . values ( ) ] ) ;
384
- commands . executeCommand ( 'setContext' , 'git.closedRepositoryCount' , this . _closedRepositories . size ) ;
385
- }
386
-
387
416
private async onDidChangeVisibleTextEditors ( editors : readonly TextEditor [ ] ) : Promise < void > {
388
417
if ( ! workspace . isTrusted ) {
389
418
this . logger . trace ( '[svte] Workspace is not trusted.' ) ;
@@ -496,7 +525,7 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
496
525
}
497
526
498
527
// Handle repositories that were closed by the user
499
- if ( ! openIfClosed && this . _closedRepositories . has ( repositoryRoot ) ) {
528
+ if ( ! openIfClosed && this . _closedRepositoriesManager . isRepositoryClosed ( repositoryRoot ) ) {
500
529
this . logger . trace ( `Repository for path ${ repositoryRoot } is closed` ) ;
501
530
return ;
502
531
}
@@ -506,7 +535,7 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
506
535
const repository = new Repository ( this . git . open ( repositoryRoot , dotGit , this . logger ) , this , this , this , this , this . globalState , this . logger , this . telemetryReporter ) ;
507
536
508
537
this . open ( repository ) ;
509
- this . _closedRepositories . delete ( repository . root ) ;
538
+ this . _closedRepositoriesManager . deleteRepository ( repository . root ) ;
510
539
511
540
// Do not await this, we want SCM
512
541
// to know about the repo asap
@@ -658,7 +687,7 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
658
687
}
659
688
660
689
this . logger . info ( `Close repository: ${ repository . root } ` ) ;
661
- this . _closedRepositories . add ( openRepository . repository . root . toString ( ) ) ;
690
+ this . _closedRepositoriesManager . addRepository ( openRepository . repository . root ) ;
662
691
663
692
openRepository . dispose ( ) ;
664
693
}
0 commit comments