diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index b2bcadb3a71..aabfa256039 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -290,6 +290,7 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi this._unsafeRepositoriesManager = new UnsafeRepositoriesManager(); workspace.onDidChangeWorkspaceFolders(this.onDidChangeWorkspaceFolders, this, this.disposables); + workspace.onDidChangeWorkspaceTrustedFolders(this.onDidChangeWorkspaceTrustedFolders, this, this.disposables); window.onDidChangeVisibleTextEditors(this.onDidChangeVisibleTextEditors, this, this.disposables); window.onDidChangeActiveTextEditor(this.onDidChangeActiveTextEditor, this, this.disposables); workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this.disposables); @@ -488,6 +489,27 @@ export class Model implements IRepositoryResolver, IBranchProtectionProviderRegi } } + private async onDidChangeWorkspaceTrustedFolders(): Promise { + try { + const openRepositoriesToDispose: OpenRepository[] = []; + + for (const openRepository of this.openRepositories) { + const dotGitPath = openRepository.repository.dotGit.commonPath ?? openRepository.repository.dotGit.path; + const isTrusted = await workspace.isResourceTrusted(Uri.file(path.dirname(dotGitPath))); + + if (!isTrusted) { + openRepositoriesToDispose.push(openRepository); + this.logger.trace(`[Model][onDidChangeWorkspaceTrustedFolders] Repository is no longer trusted: ${openRepository.repository.root}`); + } + } + + openRepositoriesToDispose.forEach(r => r.dispose()); + } + catch (err) { + this.logger.warn(`[Model][onDidChangeWorkspaceTrustedFolders] Error: ${err}`); + } + } + private onDidChangeConfiguration(): void { const possibleRepositoryFolders = (workspace.workspaceFolders || []) .filter(folder => workspace.getConfiguration('git', folder.uri).get('enabled') === true)