Skip to content

Commit 12533c5

Browse files
authored
Git - extract close repository management into its own class (microsoft#184752)
1 parent d81ca6d commit 12533c5

File tree

3 files changed

+45
-86
lines changed

3 files changed

+45
-86
lines changed

extensions/git/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
"command": "git.reopenClosedRepositories",
8989
"title": "%command.reopenClosedRepositories%",
9090
"category": "Git",
91-
"enablement": "!operationInProgress && git.ClosedRepositoryCount != 0"
91+
"enablement": "!operationInProgress && git.closedRepositoryCount != 0"
9292
},
9393
{
9494
"command": "git.close",

extensions/git/src/model.ts

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { ApiRepository } from './api/api1';
1919
import { IRemoteSourcePublisherRegistry } from './remotePublisher';
2020
import { IPostCommitCommandsProviderRegistry } from './postCommitCommands';
2121
import { IBranchProtectionProviderRegistry } from './branchProtection';
22-
import { ObservableSet } from './observable';
2322

2423
class RepositoryPick implements QuickPickItem {
2524
@memoize get label(): string {
@@ -93,6 +92,42 @@ interface OpenRepository extends Disposable {
9392
repository: Repository;
9493
}
9594

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+
96131
export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePublisherRegistry, IPostCommitCommandsProviderRegistry, IPushErrorHandlerRegistry {
97132

98133
private _onDidOpenRepository = new EventEmitter<Repository>();
@@ -170,9 +205,9 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
170205
return this._parentRepositories;
171206
}
172207

173-
private _closedRepositories: ObservableSet<string>;
208+
private _closedRepositoriesManager: ClosedRepositoriesManager;
174209
get closedRepositories(): string[] {
175-
return [...this._closedRepositories.values()];
210+
return [...this._closedRepositoriesManager.repositories];
176211
}
177212

178213
/**
@@ -187,10 +222,9 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
187222

188223
private disposables: Disposable[] = [];
189224

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);
194228

195229
workspace.onDidChangeWorkspaceFolders(this.onDidChangeWorkspaceFolders, this, this.disposables);
196230
window.onDidChangeVisibleTextEditors(this.onDidChangeVisibleTextEditors, this, this.disposables);
@@ -379,11 +413,6 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
379413
openRepositoriesToDispose.forEach(r => r.dispose());
380414
}
381415

382-
private onDidChangeClosedRepositories(): void {
383-
this.workspaceState.update('closedRepositories', [...this._closedRepositories.values()]);
384-
commands.executeCommand('setContext', 'git.closedRepositoryCount', this._closedRepositories.size);
385-
}
386-
387416
private async onDidChangeVisibleTextEditors(editors: readonly TextEditor[]): Promise<void> {
388417
if (!workspace.isTrusted) {
389418
this.logger.trace('[svte] Workspace is not trusted.');
@@ -496,7 +525,7 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
496525
}
497526

498527
// Handle repositories that were closed by the user
499-
if (!openIfClosed && this._closedRepositories.has(repositoryRoot)) {
528+
if (!openIfClosed && this._closedRepositoriesManager.isRepositoryClosed(repositoryRoot)) {
500529
this.logger.trace(`Repository for path ${repositoryRoot} is closed`);
501530
return;
502531
}
@@ -506,7 +535,7 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
506535
const repository = new Repository(this.git.open(repositoryRoot, dotGit, this.logger), this, this, this, this, this.globalState, this.logger, this.telemetryReporter);
507536

508537
this.open(repository);
509-
this._closedRepositories.delete(repository.root);
538+
this._closedRepositoriesManager.deleteRepository(repository.root);
510539

511540
// Do not await this, we want SCM
512541
// to know about the repo asap
@@ -658,7 +687,7 @@ export class Model implements IBranchProtectionProviderRegistry, IRemoteSourcePu
658687
}
659688

660689
this.logger.info(`Close repository: ${repository.root}`);
661-
this._closedRepositories.add(openRepository.repository.root.toString());
690+
this._closedRepositoriesManager.addRepository(openRepository.repository.root);
662691

663692
openRepository.dispose();
664693
}

extensions/git/src/observable.ts

Lines changed: 0 additions & 70 deletions
This file was deleted.

0 commit comments

Comments
 (0)