diff --git a/extensions/git/package.json b/extensions/git/package.json index 254d2165b70..d658653129a 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -678,7 +678,7 @@ }, { "command": "git.rename", - "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file" + "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && resourceScheme == file && scmActiveResourceRepository" }, { "command": "git.commit", diff --git a/src/vs/workbench/contrib/scm/browser/activity.ts b/src/vs/workbench/contrib/scm/browser/activity.ts index a9611729d33..399e48dcce8 100644 --- a/src/vs/workbench/contrib/scm/browser/activity.ts +++ b/src/vs/workbench/contrib/scm/browser/activity.ts @@ -197,7 +197,8 @@ export class SCMStatusController implements IWorkbenchContribution { export class SCMActiveResourceContextKeyController implements IWorkbenchContribution { - private contextKey: IContextKey; + private activeResourceHasChangesContextKey: IContextKey; + private activeResourceRepositoryContextKey: IContextKey; private disposables = new DisposableStore(); private repositoryDisposables = new Set(); @@ -207,7 +208,8 @@ export class SCMActiveResourceContextKeyController implements IWorkbenchContribu @ISCMService private readonly scmService: ISCMService, @IUriIdentityService private readonly uriIdentityService: IUriIdentityService ) { - this.contextKey = contextKeyService.createKey('scmActiveResourceHasChanges', false); + this.activeResourceHasChangesContextKey = contextKeyService.createKey('scmActiveResourceHasChanges', false); + this.activeResourceRepositoryContextKey = contextKeyService.createKey('scmActiveResourceRepository', undefined); this.scmService.onDidAddRepository(this.onDidAddRepository, this, this.disposables); @@ -237,19 +239,26 @@ export class SCMActiveResourceContextKeyController implements IWorkbenchContribu const activeResource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor); if (activeResource?.scheme === Schemas.file || activeResource?.scheme === Schemas.vscodeRemote) { - for (const repository of this.scmService.repositories) { - for (const resourceGroup of repository.provider.groups.elements) { - if (resourceGroup.elements.find(scmResource => { - return this.uriIdentityService.extUri.isEqual(activeResource, scmResource.sourceUri); - })) { - this.contextKey.set(true); - return; - } + const activeResourceRepository = this.scmService.repositories + .find(r => r.provider.rootUri && + this.uriIdentityService.extUri.isEqualOrParent(activeResource, r.provider.rootUri)); + + this.activeResourceRepositoryContextKey.set(activeResourceRepository); + + for (const resourceGroup of activeResourceRepository?.provider.groups.elements ?? []) { + if (resourceGroup.elements + .some(scmResource => + this.uriIdentityService.extUri.isEqual(activeResource, scmResource.sourceUri))) { + this.activeResourceHasChangesContextKey.set(true); + return; } } - } - this.contextKey.set(false); + this.activeResourceHasChangesContextKey.set(false); + } else { + this.activeResourceHasChangesContextKey.set(false); + this.activeResourceRepositoryContextKey.set(undefined); + } } dispose(): void {