Skip to content

Commit 151ef35

Browse files
authored
SCM - disable actions for resource groups that do not have any resources (microsoft#236813)
1 parent d953d84 commit 151ef35

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

extensions/git/package.json

+7-7
Original file line numberDiff line numberDiff line change
@@ -163,14 +163,14 @@
163163
"title": "%command.stageAll%",
164164
"category": "Git",
165165
"icon": "$(add)",
166-
"enablement": "!operationInProgress"
166+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
167167
},
168168
{
169169
"command": "git.stageAllTracked",
170170
"title": "%command.stageAllTracked%",
171171
"category": "Git",
172172
"icon": "$(add)",
173-
"enablement": "!operationInProgress"
173+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
174174
},
175175
{
176176
"command": "git.stageAllUntracked",
@@ -243,7 +243,7 @@
243243
"title": "%command.unstageAll%",
244244
"category": "Git",
245245
"icon": "$(remove)",
246-
"enablement": "!operationInProgress"
246+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
247247
},
248248
{
249249
"command": "git.unstageSelectedRanges",
@@ -270,14 +270,14 @@
270270
"title": "%command.cleanAll%",
271271
"category": "Git",
272272
"icon": "$(discard)",
273-
"enablement": "!operationInProgress"
273+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
274274
},
275275
{
276276
"command": "git.cleanAllTracked",
277277
"title": "%command.cleanAllTracked%",
278278
"category": "Git",
279279
"icon": "$(discard)",
280-
"enablement": "!operationInProgress"
280+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
281281
},
282282
{
283283
"command": "git.cleanAllUntracked",
@@ -889,14 +889,14 @@
889889
"title": "%command.viewChanges%",
890890
"icon": "$(diff-multiple)",
891891
"category": "Git",
892-
"enablement": "!operationInProgress"
892+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
893893
},
894894
{
895895
"command": "git.viewStagedChanges",
896896
"title": "%command.viewStagedChanges%",
897897
"icon": "$(diff-multiple)",
898898
"category": "Git",
899-
"enablement": "!operationInProgress"
899+
"enablement": "!operationInProgress && scmResourceGroupResourceCount > 0"
900900
},
901901
{
902902
"command": "git.viewUntrackedChanges",

src/vs/workbench/contrib/scm/browser/menus.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { IAction } from '../../../../base/common/actions.js';
77
import { equals } from '../../../../base/common/arrays.js';
88
import { Emitter } from '../../../../base/common/event.js';
9-
import { DisposableStore, IDisposable, dispose } from '../../../../base/common/lifecycle.js';
9+
import { DisposableStore, IDisposable, MutableDisposable, dispose } from '../../../../base/common/lifecycle.js';
1010
import './media/scm.css';
1111
import { localize } from '../../../../nls.js';
1212
import { getActionBarActions } from '../../../../platform/actions/browser/menuEntryActionViewItem.js';
@@ -70,13 +70,14 @@ interface IContextualResourceMenuItem {
7070

7171
class SCMMenusItem implements IDisposable {
7272

73-
private _resourceGroupMenu: IMenu | undefined;
73+
private readonly _resourceGroupMenu = new MutableDisposable<IMenu>();
7474
get resourceGroupMenu(): IMenu {
75-
if (!this._resourceGroupMenu) {
76-
this._resourceGroupMenu = this.menuService.createMenu(MenuId.SCMResourceGroupContext, this.contextKeyService);
77-
}
75+
const contextKeyService = this.contextKeyService.createOverlay([
76+
['scmResourceGroupResourceCount', this.group.resources.length],
77+
]);
7878

79-
return this._resourceGroupMenu;
79+
this._resourceGroupMenu.value = this.menuService.createMenu(MenuId.SCMResourceGroupContext, contextKeyService);
80+
return this._resourceGroupMenu.value;
8081
}
8182

8283
private _resourceFolderMenu: IMenu | undefined;
@@ -92,8 +93,9 @@ class SCMMenusItem implements IDisposable {
9293
private contextualResourceMenus: Map<string /* contextValue */, IContextualResourceMenuItem> | undefined;
9394

9495
constructor(
95-
private contextKeyService: IContextKeyService,
96-
private menuService: IMenuService
96+
private readonly group: ISCMResourceGroup,
97+
private readonly contextKeyService: IContextKeyService,
98+
private readonly menuService: IMenuService
9799
) { }
98100

99101
getResourceMenu(resource: ISCMResource): IMenu {
@@ -206,7 +208,7 @@ export class SCMRepositoryMenus implements ISCMRepositoryMenus, IDisposable {
206208
['multiDiffEditorEnableViewChanges', group.multiDiffEditorEnableViewChanges],
207209
]);
208210

209-
result = new SCMMenusItem(contextKeyService, this.menuService);
211+
result = new SCMMenusItem(group, contextKeyService, this.menuService);
210212
this.resourceGroupMenusItems.set(group, result);
211213
}
212214

0 commit comments

Comments
 (0)