@codingame/monaco-vscode-scm-service-override 2.2.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-scm-service-override",
3
- "version": "2.2.1",
3
+ "version": "3.0.0",
4
4
  "keywords": [],
5
5
  "author": {
6
6
  "name": "CodinGame",
@@ -18,7 +18,7 @@
18
18
  "module": "index.js",
19
19
  "types": "index.d.ts",
20
20
  "dependencies": {
21
- "vscode": "npm:@codingame/monaco-vscode-api@2.2.1",
21
+ "vscode": "npm:@codingame/monaco-vscode-api@3.0.0",
22
22
  "vscode-marked": "npm:marked@=3.0.2"
23
23
  }
24
24
  }
@@ -5,7 +5,7 @@ import { Disposable, MutableDisposable, DisposableStore, combinedDisposable, dis
5
5
  import { Event } from 'vscode/vscode/vs/base/common/event';
6
6
  import { VIEW_PANE_ID, ISCMService, ISCMViewService } from 'vscode/vscode/vs/workbench/contrib/scm/common/scm';
7
7
  import { NumberBadge, IActivityService } from 'vscode/vscode/vs/workbench/services/activity/common/activity';
8
- import { IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
8
+ import { RawContextKey, IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
9
9
  import { IStatusbarService } from 'vscode/vscode/vs/workbench/services/statusbar/browser/statusbar';
10
10
  import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
11
11
  import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration';
@@ -13,6 +13,7 @@ import { EditorResourceAccessor } from 'vscode/vscode/vs/workbench/common/editor
13
13
  import { IUriIdentityService } from 'vscode/vscode/vs/platform/uriIdentity/common/uriIdentity';
14
14
  import { Schemas } from 'vscode/vscode/vs/base/common/network';
15
15
  import { Iterable } from 'vscode/vscode/vs/base/common/iterator';
16
+ import { ITitleService } from 'vscode/vscode/vs/workbench/services/title/browser/titleService';
16
17
 
17
18
  function getCount(repository) {
18
19
  if (typeof repository.provider.count === 'number') {
@@ -186,6 +187,63 @@ SCMStatusController = ( __decorate([
186
187
  ( __param(5, IConfigurationService)),
187
188
  ( __param(6, IUriIdentityService))
188
189
  ], SCMStatusController));
190
+ const ActiveRepositoryContextKeys = {
191
+ ActiveRepositoryName: ( new RawContextKey('scmActiveRepositoryName', '')),
192
+ ActiveRepositoryBranchName: ( new RawContextKey('scmActiveRepositoryBranchName', '')),
193
+ };
194
+ let SCMActiveRepositoryContextKeyController = class SCMActiveRepositoryContextKeyController {
195
+ constructor(contextKeyService, editorService, scmViewService, titleService, uriIdentityService) {
196
+ this.editorService = editorService;
197
+ this.scmViewService = scmViewService;
198
+ this.uriIdentityService = uriIdentityService;
199
+ this.focusedRepository = undefined;
200
+ this.focusDisposable = Disposable.None;
201
+ this.disposables = ( new DisposableStore());
202
+ this.activeRepositoryNameContextKey = ActiveRepositoryContextKeys.ActiveRepositoryName.bindTo(contextKeyService);
203
+ this.activeRepositoryBranchNameContextKey = ActiveRepositoryContextKeys.ActiveRepositoryBranchName.bindTo(contextKeyService);
204
+ titleService.registerVariables([
205
+ { name: 'activeRepositoryName', contextKey: ActiveRepositoryContextKeys.ActiveRepositoryName.key },
206
+ { name: 'activeRepositoryBranchName', contextKey: ActiveRepositoryContextKeys.ActiveRepositoryBranchName.key, }
207
+ ]);
208
+ editorService.onDidActiveEditorChange(this.onDidActiveEditorChange, this, this.disposables);
209
+ scmViewService.onDidFocusRepository(this.onDidFocusRepository, this, this.disposables);
210
+ this.onDidFocusRepository(scmViewService.focusedRepository);
211
+ }
212
+ onDidActiveEditorChange() {
213
+ const activeResource = EditorResourceAccessor.getOriginalUri(this.editorService.activeEditor);
214
+ if (activeResource?.scheme !== Schemas.file && activeResource?.scheme !== Schemas.vscodeRemote) {
215
+ return;
216
+ }
217
+ const repository = Iterable.find(this.scmViewService.repositories, r => Boolean(r.provider.rootUri && this.uriIdentityService.extUri.isEqualOrParent(activeResource, r.provider.rootUri)));
218
+ this.onDidFocusRepository(repository);
219
+ }
220
+ onDidFocusRepository(repository) {
221
+ if (!repository || this.focusedRepository === repository) {
222
+ return;
223
+ }
224
+ this.focusDisposable.dispose();
225
+ this.focusedRepository = repository;
226
+ if (repository && repository.provider.onDidChangeStatusBarCommands) {
227
+ this.focusDisposable = repository.provider.onDidChangeStatusBarCommands(() => this.updateContextKeys(repository));
228
+ }
229
+ this.updateContextKeys(repository);
230
+ }
231
+ updateContextKeys(repository) {
232
+ this.activeRepositoryNameContextKey.set(repository?.provider.name ?? '');
233
+ this.activeRepositoryBranchNameContextKey.set(repository?.provider.historyProvider?.currentHistoryItemGroup?.label ?? '');
234
+ }
235
+ dispose() {
236
+ this.focusDisposable.dispose();
237
+ this.disposables.dispose();
238
+ }
239
+ };
240
+ SCMActiveRepositoryContextKeyController = ( __decorate([
241
+ ( __param(0, IContextKeyService)),
242
+ ( __param(1, IEditorService)),
243
+ ( __param(2, ISCMViewService)),
244
+ ( __param(3, ITitleService)),
245
+ ( __param(4, IUriIdentityService))
246
+ ], SCMActiveRepositoryContextKeyController));
189
247
  let SCMActiveResourceContextKeyController = class SCMActiveResourceContextKeyController {
190
248
  constructor(contextKeyService, editorService, scmService, uriIdentityService) {
191
249
  this.editorService = editorService;
@@ -247,4 +305,4 @@ SCMActiveResourceContextKeyController = ( __decorate([
247
305
  ( __param(3, IUriIdentityService))
248
306
  ], SCMActiveResourceContextKeyController));
249
307
 
250
- export { SCMActiveResourceContextKeyController, SCMStatusController };
308
+ export { SCMActiveRepositoryContextKeyController, SCMActiveResourceContextKeyController, SCMStatusController };
@@ -1,6 +1,6 @@
1
1
  import n from '../../../../../../../../external/rollup-plugin-styles/dist/runtime/inject-css.js';
2
2
 
3
- var css = ".scm-view{height:100%;position:relative}.scm-overflow-widgets-container{height:0;left:0;overflow:visible;position:absolute;top:0;width:0;z-index:5000}.scm-view .monaco-tl-contents>div{overflow:hidden;padding-right:12px}.scm-view .count{display:flex;margin-left:6px}.scm-view .count.hidden{display:none}.scm-view .scm-provider{align-items:center;display:flex;flex-direction:column;flex-flow:nowrap;height:100%}.scm-view.auto-provider-counts .scm-provider>.count[data-count=\"0\"],.scm-view.hide-provider-counts .scm-provider>.count{display:none}.scm-view .scm-provider>.label{flex:1;min-width:50px;overflow:hidden;text-overflow:ellipsis}.scm-view .scm-provider>.label>.name{font-weight:700}.scm-view .scm-provider>.label>.description{font-size:.9em;margin-left:.5em;opacity:.7}.scm-view .scm-provider>.actions{justify-content:flex-end;overflow:hidden}.scm-view .monaco-editor .selected-text{border-radius:0}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item{align-items:center;display:flex;padding-left:4px}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item:first-child{min-width:20px}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item>.action-label,.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item>.monaco-dropdown>.dropdown-label>.action-label{align-items:center;display:flex;line-height:16px;overflow:hidden}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item>.action-label>.codicon{font-size:12px;justify-content:center}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item:last-of-type{padding-right:0}.scm-view .scm-provider>.body{flex-grow:1}.scm-view .scm-provider>.status>.monaco-action-bar>.actions-container{border-color:var(--vscode-sideBar-border)}.scm-view .monaco-list-row{line-height:22px}.scm-view .monaco-list-row .history,.scm-view .monaco-list-row .history-item-group,.scm-view .monaco-list-row .resource-group{align-items:center;display:flex;height:100%}.scm-view .monaco-list-row .history-item .monaco-icon-label,.scm-view .monaco-list-row .history-item-group .monaco-icon-label{align-items:center;flex-grow:1}.scm-view .monaco-list-row .history-item{align-items:center;display:flex}.scm-view .monaco-list-row .history-item .stats-container{border:1px solid var(--vscode-scm-historyItemStatisticsBorder);border-radius:2px;display:flex;font-size:11px;gap:4px;line-height:11px;margin-left:6px;min-height:18px;padding:0 4px}.scm-view .monaco-list-row.focused .history-item .stats-container,.scm-view .monaco-list-row.selected .history-item .stats-container{border:1px solid var(--vscode-scm-historyItemSelectedStatisticsBorder)}.scm-view .monaco-list-row .history-item .stats-container>.deletions-label,.scm-view .monaco-list-row .history-item .stats-container>.files-label,.scm-view .monaco-list-row .history-item .stats-container>.insertions-label{align-items:center;display:flex;opacity:.75}.scm-view .monaco-list-row .history-item .stats-container>.insertions-label{color:var(--vscode-scm-historyItemAdditionsForeground)}.scm-view .monaco-list-row .history-item .stats-container>.deletions-label{color:var(--vscode-scm-historyItemDeletionsForeground)}.scm-view .monaco-list-row .history-item .stats-container.hidden,.scm-view .monaco-list-row .history-item .stats-container>.deletions-label.hidden,.scm-view .monaco-list-row .history-item .stats-container>.insertions-label.hidden{display:none}.scm-view .monaco-list-row .history-item .monaco-icon-label .icon-container,.scm-view .monaco-list-row .history-item-group .monaco-icon-label .icon-container{display:flex;padding-right:4px}.scm-view .monaco-list-row .history-item .monaco-icon-label .avatar{border-radius:14px;height:14px;width:14px}.scm-view .monaco-list-row .separator-container{align-items:center;display:flex;padding-left:11px}.scm-view .monaco-list-row .separator-container .label-name{font-size:10px}.scm-view .monaco-list-row.focused .separator-container .label-name,.scm-view .monaco-list-row.selected .separator-container .label-name{color:var(--vscode-foreground)}.scm-view .monaco-list-row .separator-container .separator{border-top:1px solid var(--vscode-sideBar-border);display:flex;flex-grow:1;height:0;margin-left:6px}.scm-view .monaco-list-row .history-item-group>.name,.scm-view .monaco-list-row .history>.name,.scm-view .monaco-list-row .resource-group>.name{flex:1;overflow:hidden;text-overflow:ellipsis}.scm-view .monaco-list-row .resource{display:flex;height:100%}.scm-view .monaco-list-row .resource.faded{opacity:.7}.scm-view .monaco-list-row .resource>.name{flex:1;overflow:hidden}.scm-view .monaco-list-row .resource>.name>.monaco-icon-label:after{margin-right:3px}.scm-view .monaco-list-row .resource>.decoration-icon{background-position:50% 50%;background-repeat:no-repeat;height:100%;margin-right:8px;width:16px}.scm-view .monaco-list-row .resource>.decoration-icon.codicon{margin-right:0;margin-top:3px}.scm-view .monaco-list .monaco-list-row .resource>.name>.monaco-icon-label>.actions{flex-grow:100}.scm-view .monaco-list .monaco-list-row .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row .history-item>.actions,.scm-view .monaco-list .monaco-list-row .resource-group>.actions,.scm-view .monaco-list .monaco-list-row .resource>.name>.monaco-icon-label>.actions{display:none;max-width:fit-content}.scm-view .monaco-list .monaco-list-row.focused .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row.focused .history-item>.actions,.scm-view .monaco-list .monaco-list-row.focused .resource-group>.actions,.scm-view .monaco-list .monaco-list-row.focused .resource>.name>.monaco-icon-label>.actions,.scm-view .monaco-list .monaco-list-row.selected .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row.selected .history-item>.actions,.scm-view .monaco-list .monaco-list-row.selected .resource-group>.actions,.scm-view .monaco-list .monaco-list-row.selected .resource>.name>.monaco-icon-label>.actions,.scm-view .monaco-list .monaco-list-row:hover .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row:hover .history-item>.actions,.scm-view .monaco-list .monaco-list-row:hover .resource-group>.actions,.scm-view .monaco-list .monaco-list-row:hover .resource>.name>.monaco-icon-label>.actions,.scm-view .monaco-list:not(.selection-multiple) .monaco-list-row .resource:hover>.actions{display:block}.scm-view .monaco-list .monaco-list-row.focused.force-no-hover,.scm-view .monaco-list .monaco-list-row.force-no-hover,.scm-view .monaco-list .monaco-list-row.selected.force-no-hover,.scm-view .monaco-list .monaco-list-row:hover.force-no-hover{background:transparent!important}.scm-view .monaco-list .monaco-list-row.cursor-default{cursor:default}.scm-view.show-actions .scm-provider>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .history-item-group>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .history-item>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .resource-group>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .resource>.name>.monaco-icon-label>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .scm-input>.scm-editor>.actions{display:block}.scm-view .monaco-list-row .actions .action-label{padding:2px}.scm-view .scm-input{align-items:center;display:flex;height:100%;padding-left:11px}.scm-view .scm-input .scm-editor .scm-editor-toolbar{padding:1px 3px 1px 1px}.scm-view .scm-input .scm-editor .scm-editor-toolbar.hidden{display:none}.scm-view .scm-input .scm-editor .scm-editor-toolbar.scroll-decoration{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.scm-view .scm-input .scm-editor .scm-editor-toolbar .action-label.codicon.codicon-debug-stop{color:var(--vscode-icon-foreground)!important}.scm-view .scm-editor-container .monaco-editor{border-radius:2px}.scm-view .scm-editor-container .monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.scm-view .scm-editor{align-items:flex-start;background-color:var(--vscode-input-background);border:1px solid var(--vscode-input-border,transparent);border-radius:2px;box-sizing:border-box;display:flex;width:100%}.scm-view .button-container{align-items:center;display:flex;height:100%;padding-left:11px}.scm-view .button-container .codicon.codicon-cloud-upload,.scm-view .button-container .codicon.codicon-sync{margin:0 4px 0 0}.scm-view .button-container .codicon.codicon-arrow-down,.scm-view .button-container .codicon.codicon-arrow-up{font-size:small!important;margin:0 4px 0 0}.scm-view .button-container>.monaco-button-dropdown{flex-grow:1;overflow:hidden}.scm-view .button-container>.monaco-button-dropdown>.monaco-dropdown-button{align-items:center;display:flex;padding:0 4px}.scm-view .button-container>.monaco-button-dropdown>.monaco-button.monaco-text-button{min-width:0}.scm-view .button-container>.monaco-button-dropdown>.monaco-button.monaco-text-button>span:not(.codicon){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scm-view .scm-editor.hidden{display:none}.monaco-workbench .part.panel .scm-view .scm-editor-container{outline:1px solid var(--vscode-panelInput-border)}.monaco-workbench .part.panel .scm-view .scm-editor.synthetic-focus,.scm-view .scm-editor.synthetic-focus{outline:1px solid var(--vscode-focusBorder);outline-offset:-1px}.scm-view .scm-editor.validation-info{outline:1px solid var(--vscode-inputValidation-infoBorder)!important;outline-offset:-1px}.scm-view .scm-editor.validation-warning{outline:1px solid var(--vscode-inputValidation-warningBorder)!important;outline-offset:-1px}.scm-view .scm-editor.validation-error{outline:1px solid var(--vscode-inputValidation-errorBorder)!important;outline-offset:-1px}.scm-editor-validation-container{border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-style:solid;border-width:1px;border-top:none;box-sizing:border-box;display:flex;padding:2px}.scm-editor-validation-container.validation-info{background-color:var(--vscode-inputValidation-infoBackground);border-color:var(--vscode-inputValidation-infoBorder);color:var(--vscode-inputValidation-infoForeground)}.scm-editor-validation-container.validation-warning{background-color:var(--vscode-inputValidation-warningBackground);border-color:var(--vscode-inputValidation-warningBorder);color:var(--vscode-inputValidation-warningForeground)}.scm-editor-validation-container.validation-error{background-color:var(--vscode-inputValidation-errorBackground);border-color:var(--vscode-inputValidation-errorBorder);color:var(--vscode-inputValidation-errorForeground)}.scm-editor-validation{border-style:none;box-sizing:border-box;display:block;flex:auto;font-size:.9em;padding:1px 3px}.scm-editor-validation p{margin:0;padding:0}.scm-editor-validation a{color:var(--vscode-textLink-foreground);-webkit-user-select:none;user-select:none}.scm-editor-validation a:active,.scm-editor-validation a:hover{color:var(--vscode-textLink-activeForeground)}.scm-editor-validation-actions{align-self:start;margin-top:1px}.scm-view .scm-editor-placeholder{box-sizing:border-box;color:var(--vscode-input-placeholderForeground);overflow:hidden;padding:2px 6px;pointer-events:none;position:absolute;text-overflow:ellipsis;white-space:nowrap;z-index:1}.scm-view .scm-editor-placeholder.hidden{display:none}.monaco-workbench .part.basepanel>.content .scm-view .scm-editor-container .monaco-editor,.monaco-workbench .part.basepanel>.content .scm-view .scm-editor-container .monaco-editor .margin,.monaco-workbench .part.basepanel>.content .scm-view .scm-editor-container .monaco-editor .monaco-editor-background,.scm-view .scm-editor-container .monaco-editor,.scm-view .scm-editor-container .monaco-editor .margin,.scm-view .scm-editor-container .monaco-editor-background{background-color:var(--vscode-input-background);color:inherit}.scm-view .scm-editor-container .mtk1{color:var(--vscode-input-foreground)}.scm-repositories-view .scm-provider{margin:0 12px 0 20px;overflow:hidden}.scm-repositories-view .scm-provider>.label>.name{font-weight:400}";
3
+ var css = ".scm-view{height:100%;position:relative}.scm-overflow-widgets-container{height:0;left:0;overflow:visible;position:absolute;top:0;width:0;z-index:5000}.scm-view .monaco-tl-contents>div{overflow:hidden;padding-right:12px}.scm-view .count{display:flex;margin-left:6px}.scm-view .count.hidden{display:none}.scm-view .scm-provider{align-items:center;display:flex;flex-direction:column;flex-flow:nowrap;height:100%}.scm-view.auto-provider-counts .scm-provider>.count[data-count=\"0\"],.scm-view.hide-provider-counts .scm-provider>.count{display:none}.scm-view .scm-provider>.label{flex:1;min-width:50px;overflow:hidden;text-overflow:ellipsis}.scm-view .scm-provider>.label>.name{font-weight:700}.scm-view .scm-provider>.label>.description{font-size:.9em;margin-left:.5em;opacity:.7}.scm-view .scm-provider>.actions{justify-content:flex-end;overflow:hidden}.scm-view .monaco-editor .selected-text{border-radius:0}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item{align-items:center;display:flex;padding-left:4px}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item:first-child{min-width:20px}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item>.action-label,.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item>.monaco-dropdown>.dropdown-label>.action-label{align-items:center;display:flex;line-height:16px;overflow:hidden}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item>.action-label>.codicon{font-size:12px;justify-content:center}.scm-view .scm-provider>.actions>.monaco-toolbar>.monaco-action-bar>.actions-container>.action-item:last-of-type{padding-right:0}.scm-view .scm-provider>.body{flex-grow:1}.scm-view .scm-provider>.status>.monaco-action-bar>.actions-container{border-color:var(--vscode-sideBar-border)}.scm-view .monaco-list-row{line-height:22px}.scm-view .monaco-list-row .history,.scm-view .monaco-list-row .history-item-group,.scm-view .monaco-list-row .resource-group{align-items:center;display:flex;height:100%}.scm-view .monaco-list-row .history-item .monaco-icon-label,.scm-view .monaco-list-row .history-item-group .monaco-icon-label{align-items:center;flex-grow:1}.scm-view .monaco-list-row .history-item{align-items:center;display:flex}.scm-view .monaco-list-row .history-item .stats-container{border:1px solid var(--vscode-scm-historyItemStatisticsBorder);border-radius:2px;display:flex;font-size:11px;gap:4px;line-height:11px;margin-left:6px;min-height:18px;padding:0 4px}.scm-view .monaco-list-row.focused .history-item .stats-container,.scm-view .monaco-list-row.selected .history-item .stats-container{border:1px solid var(--vscode-scm-historyItemSelectedStatisticsBorder)}.scm-view .monaco-list-row .history-item .stats-container>.deletions-label,.scm-view .monaco-list-row .history-item .stats-container>.files-label,.scm-view .monaco-list-row .history-item .stats-container>.insertions-label{align-items:center;display:flex;opacity:.75}.scm-view .monaco-list-row .history-item .stats-container>.insertions-label{color:var(--vscode-scm-historyItemAdditionsForeground)}.scm-view .monaco-list-row .history-item .stats-container>.deletions-label{color:var(--vscode-scm-historyItemDeletionsForeground)}.scm-view .monaco-list-row .history-item .stats-container.hidden,.scm-view .monaco-list-row .history-item .stats-container>.deletions-label.hidden,.scm-view .monaco-list-row .history-item .stats-container>.insertions-label.hidden{display:none}.scm-view .monaco-list-row .history-item .monaco-icon-label .icon-container,.scm-view .monaco-list-row .history-item-group .monaco-icon-label .icon-container{display:flex;padding-right:4px}.scm-view .monaco-list-row .history-item .monaco-icon-label .avatar{border-radius:14px;height:14px;width:14px}.scm-view .monaco-list-row .separator-container{align-items:center;display:flex;padding-left:11px}.scm-view .monaco-list-row .separator-container .label-name{font-size:10px}.scm-view .monaco-list-row.focused .separator-container .label-name,.scm-view .monaco-list-row.selected .separator-container .label-name{color:var(--vscode-foreground)}.scm-view .monaco-list-row .separator-container .separator{border-top:1px solid var(--vscode-sideBar-border);display:flex;flex-grow:1;height:0;margin-left:6px}.scm-view .monaco-list-row .separator-container .actions{padding-left:6px}.scm-view .monaco-list-row .history-item-group>.name,.scm-view .monaco-list-row .history>.name,.scm-view .monaco-list-row .resource-group>.name{flex:1;overflow:hidden;text-overflow:ellipsis}.scm-view .monaco-list-row .resource{display:flex;height:100%}.scm-view .monaco-list-row .resource.faded{opacity:.7}.scm-view .monaco-list-row .resource>.name{flex:1;overflow:hidden}.scm-view .monaco-list-row .resource>.name>.monaco-icon-label:after{margin-right:3px}.scm-view .monaco-list-row .resource>.decoration-icon{background-position:50% 50%;background-repeat:no-repeat;height:100%;margin-right:8px;width:16px}.scm-view .monaco-list-row .resource>.decoration-icon.codicon{margin-right:0;margin-top:3px}.scm-view .monaco-list .monaco-list-row .resource>.name>.monaco-icon-label>.actions{flex-grow:100}.scm-view .monaco-list .monaco-list-row .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row .history-item>.actions,.scm-view .monaco-list .monaco-list-row .resource-group>.actions,.scm-view .monaco-list .monaco-list-row .resource>.name>.monaco-icon-label>.actions,.scm-view .monaco-list .monaco-list-row .separator-container>.actions{display:none;max-width:fit-content}.scm-view .monaco-list .monaco-list-row.focused .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row.focused .history-item>.actions,.scm-view .monaco-list .monaco-list-row.focused .resource-group>.actions,.scm-view .monaco-list .monaco-list-row.focused .resource>.name>.monaco-icon-label>.actions,.scm-view .monaco-list .monaco-list-row.focused .separator-container>.actions,.scm-view .monaco-list .monaco-list-row:hover .history-item-group>.actions,.scm-view .monaco-list .monaco-list-row:hover .history-item>.actions,.scm-view .monaco-list .monaco-list-row:hover .resource-group>.actions,.scm-view .monaco-list .monaco-list-row:hover .resource>.name>.monaco-icon-label>.actions,.scm-view .monaco-list .monaco-list-row:hover .separator-container>.actions,.scm-view .monaco-list:not(.selection-multiple) .monaco-list-row .resource:hover>.actions{display:block}.scm-view .monaco-list .monaco-list-row.focused.force-no-hover,.scm-view .monaco-list .monaco-list-row.force-no-hover,.scm-view .monaco-list .monaco-list-row.selected.force-no-hover,.scm-view .monaco-list .monaco-list-row:hover.force-no-hover{background:transparent!important}.scm-view .monaco-list .monaco-list-row.cursor-default{cursor:default}.scm-view.show-actions .scm-provider>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .history-item-group>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .history-item>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .resource-group>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .resource>.name>.monaco-icon-label>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .scm-input>.scm-editor>.actions,.scm-view.show-actions>.monaco-list .monaco-list-row .separator-container>.actions{display:block}.scm-view .monaco-list-row .actions .action-label{padding:2px}.scm-view .scm-input{align-items:center;display:flex;height:100%;padding-left:11px}.scm-view .scm-input .scm-editor .scm-editor-toolbar{padding:1px 3px 1px 1px}.scm-view .scm-input .scm-editor .scm-editor-toolbar.hidden{display:none}.scm-view .scm-input .scm-editor .scm-editor-toolbar.scroll-decoration{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.scm-view .scm-input .scm-editor .scm-editor-toolbar .action-label.codicon.codicon-debug-stop{color:var(--vscode-icon-foreground)!important}.scm-view .scm-editor-container .monaco-editor{border-radius:2px}.scm-view .scm-editor-container .monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.scm-view .scm-editor{align-items:flex-start;background-color:var(--vscode-input-background);border:1px solid var(--vscode-input-border,transparent);border-radius:2px;box-sizing:border-box;display:flex;width:100%}.scm-view .button-container{align-items:center;display:flex;height:100%;padding-left:11px}.scm-view .button-container .codicon.codicon-cloud-upload,.scm-view .button-container .codicon.codicon-sync{margin:0 4px 0 0}.scm-view .button-container .codicon.codicon-arrow-down,.scm-view .button-container .codicon.codicon-arrow-up{font-size:small!important;margin:0 4px 0 0}.scm-view .button-container>.monaco-button-dropdown{flex-grow:1;overflow:hidden}.scm-view .button-container>.monaco-button-dropdown>.monaco-dropdown-button{align-items:center;display:flex;padding:0 4px}.scm-view .button-container>.monaco-button-dropdown>.monaco-button.monaco-text-button{min-width:0}.scm-view .button-container>.monaco-button-dropdown>.monaco-button.monaco-text-button>span:not(.codicon){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scm-view .scm-editor.hidden{display:none}.monaco-workbench .part.panel .scm-view .scm-editor-container{outline:1px solid var(--vscode-panelInput-border)}.monaco-workbench .part.panel .scm-view .scm-editor.synthetic-focus,.scm-view .scm-editor.synthetic-focus{outline:1px solid var(--vscode-focusBorder);outline-offset:-1px}.scm-view .scm-editor.validation-info{outline:1px solid var(--vscode-inputValidation-infoBorder)!important;outline-offset:-1px}.scm-view .scm-editor.validation-warning{outline:1px solid var(--vscode-inputValidation-warningBorder)!important;outline-offset:-1px}.scm-view .scm-editor.validation-error{outline:1px solid var(--vscode-inputValidation-errorBorder)!important;outline-offset:-1px}.scm-editor-validation-container{border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-style:solid;border-width:1px;border-top:none;box-sizing:border-box;display:flex;padding:2px}.scm-editor-validation-container.validation-info{background-color:var(--vscode-inputValidation-infoBackground);border-color:var(--vscode-inputValidation-infoBorder);color:var(--vscode-inputValidation-infoForeground)}.scm-editor-validation-container.validation-warning{background-color:var(--vscode-inputValidation-warningBackground);border-color:var(--vscode-inputValidation-warningBorder);color:var(--vscode-inputValidation-warningForeground)}.scm-editor-validation-container.validation-error{background-color:var(--vscode-inputValidation-errorBackground);border-color:var(--vscode-inputValidation-errorBorder);color:var(--vscode-inputValidation-errorForeground)}.scm-editor-validation{border-style:none;box-sizing:border-box;display:block;flex:auto;font-size:.9em;padding:1px 3px}.scm-editor-validation p{margin:0;padding:0}.scm-editor-validation a{color:var(--vscode-textLink-foreground);-webkit-user-select:none;user-select:none}.scm-editor-validation a:active,.scm-editor-validation a:hover{color:var(--vscode-textLink-activeForeground)}.scm-editor-validation-actions{align-self:start;margin-top:1px}.scm-view .scm-editor-placeholder{box-sizing:border-box;color:var(--vscode-input-placeholderForeground);overflow:hidden;padding:2px 6px;pointer-events:none;position:absolute;text-overflow:ellipsis;white-space:nowrap;z-index:1}.scm-view .scm-editor-placeholder.hidden{display:none}.monaco-workbench .part.basepanel>.content .scm-view .scm-editor-container .monaco-editor,.monaco-workbench .part.basepanel>.content .scm-view .scm-editor-container .monaco-editor .margin,.monaco-workbench .part.basepanel>.content .scm-view .scm-editor-container .monaco-editor .monaco-editor-background,.scm-view .scm-editor-container .monaco-editor,.scm-view .scm-editor-container .monaco-editor .margin,.scm-view .scm-editor-container .monaco-editor-background{background-color:var(--vscode-input-background);color:inherit}.scm-view .scm-editor-container .mtk1{color:var(--vscode-input-foreground)}.scm-repositories-view .scm-provider{margin:0 12px 0 20px;overflow:hidden}.scm-repositories-view .scm-provider>.label>.name{font-weight:400}";
4
4
  n(css,{});
5
5
 
6
6
  export { css, css as default };
@@ -181,21 +181,25 @@ SCMRepositoryMenus = ( __decorate([
181
181
  ( __param(3, IMenuService))
182
182
  ], SCMRepositoryMenus));
183
183
  let SCMHistoryProviderMenus = class SCMHistoryProviderMenus {
184
- get incomingHistoryItemGroupMenu() { return this._incomingHistoryItemGroupMenu; }
185
- get outgoingHistoryItemGroupMenu() { return this._outgoingHistoryItemGroupMenu; }
186
184
  constructor(contextKeyService, menuService) {
187
185
  this.contextKeyService = contextKeyService;
188
186
  this.menuService = menuService;
189
187
  this.historyItemMenus = ( new Map());
190
188
  this.disposables = ( new DisposableStore());
191
- this._incomingHistoryItemGroupMenu = this.menuService.createMenu(MenuId.SCMIncomingChanges, this.contextKeyService);
192
- this.disposables.add(this._incomingHistoryItemGroupMenu);
193
- this._outgoingHistoryItemGroupMenu = this.menuService.createMenu(MenuId.SCMOutgoingChanges, this.contextKeyService);
194
- this.disposables.add(this._outgoingHistoryItemGroupMenu);
195
189
  }
196
190
  getHistoryItemMenu(historyItem) {
197
191
  return this.getOrCreateHistoryItemMenu(historyItem);
198
192
  }
193
+ getHistoryItemGroupMenu(historyItemGroup) {
194
+ return historyItemGroup.direction === 'incoming' ?
195
+ this.menuService.createMenu(MenuId.SCMIncomingChanges, this.contextKeyService) :
196
+ this.getOutgoingHistoryItemGroupMenu(MenuId.SCMOutgoingChanges, historyItemGroup);
197
+ }
198
+ getHistoryItemGroupContextMenu(historyItemGroup) {
199
+ return historyItemGroup.direction === 'incoming' ?
200
+ this.menuService.createMenu(MenuId.SCMIncomingChangesContext, this.contextKeyService) :
201
+ this.getOutgoingHistoryItemGroupMenu(MenuId.SCMOutgoingChangesContext, historyItemGroup);
202
+ }
199
203
  getOrCreateHistoryItemMenu(historyItem) {
200
204
  let result = this.historyItemMenus.get(historyItem);
201
205
  if (!result) {
@@ -218,6 +222,12 @@ let SCMHistoryProviderMenus = class SCMHistoryProviderMenus {
218
222
  }
219
223
  return result;
220
224
  }
225
+ getOutgoingHistoryItemGroupMenu(menuId, historyItemGroup) {
226
+ const contextKeyService = this.contextKeyService.createOverlay([
227
+ ['scmHistoryItemGroupHasUpstream', !!historyItemGroup.repository.provider.historyProvider?.currentHistoryItemGroup?.base],
228
+ ]);
229
+ return this.menuService.createMenu(menuId, contextKeyService);
230
+ }
221
231
  dispose() {
222
232
  this.disposables.dispose();
223
233
  }
@@ -4,7 +4,7 @@ import { Extensions } from 'vscode/vscode/vs/workbench/common/contributions';
4
4
  import { DirtyDiffWorkbenchController } from 'vscode/vscode/vs/workbench/contrib/scm/browser/dirtydiffDecorator';
5
5
  import { VIEWLET_ID, VIEW_PANE_ID, REPOSITORIES_VIEW_PANE_ID, ISCMService } from 'vscode/vscode/vs/workbench/contrib/scm/common/scm';
6
6
  import { MenuRegistry, MenuId } from 'vscode/vscode/vs/platform/actions/common/actions';
7
- import { SCMActiveResourceContextKeyController, SCMStatusController } from './activity.js';
7
+ import { SCMActiveResourceContextKeyController, SCMActiveRepositoryContextKeyController, SCMStatusController } from './activity.js';
8
8
  import { Extensions as Extensions$2 } from 'vscode/vscode/vs/platform/configuration/common/configurationRegistry';
9
9
  import { ContextKeyExpr, IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
10
10
  import { ICommandService, CommandsRegistry } from 'vscode/vscode/vs/platform/commands/common/commands';
@@ -120,6 +120,8 @@ viewsRegistry.registerViews([{
120
120
  }], viewContainer);
121
121
  ( Registry.as(Extensions.Workbench))
122
122
  .registerWorkbenchContribution(SCMActiveResourceContextKeyController, 3 );
123
+ ( Registry.as(Extensions.Workbench))
124
+ .registerWorkbenchContribution(SCMActiveRepositoryContextKeyController, 3 );
123
125
  ( Registry.as(Extensions.Workbench))
124
126
  .registerWorkbenchContribution(SCMStatusController, 3 );
125
127
  ( Registry.as(Extensions$2.Configuration)).registerConfiguration({
@@ -32,7 +32,7 @@ class ListDelegate {
32
32
  }
33
33
  let SCMRepositoriesViewPane = class SCMRepositoriesViewPane extends ViewPane {
34
34
  constructor(options, scmViewService, keybindingService, contextMenuService, instantiationService, viewDescriptorService, contextKeyService, configurationService, openerService, themeService, telemetryService) {
35
- super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
35
+ super({ ...options, titleMenuId: MenuId.SCMSourceControlTitle }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
36
36
  this.scmViewService = scmViewService;
37
37
  this.disposables = ( new DisposableStore());
38
38
  }
@@ -5,7 +5,7 @@ import { basename, dirname } from 'vscode/vscode/vs/base/common/resources';
5
5
  import { Disposable, DisposableStore, toDisposable, combinedDisposable, MutableDisposable, DisposableMap, dispose } from 'vscode/vscode/vs/base/common/lifecycle';
6
6
  import { ViewAction, ViewPane } from 'vscode/vscode/vs/workbench/browser/parts/views/viewPane';
7
7
  import { append, $, asCSSUrl, prepend, Dimension, trackFocus, clearNode } from 'vscode/vscode/vs/base/browser/dom';
8
- import { VIEW_PANE_ID, SCMInputChangeReason, ISCMViewService, ISCMService, REPOSITORIES_VIEW_PANE_ID } from 'vscode/vscode/vs/workbench/contrib/scm/common/scm';
8
+ import { VIEW_PANE_ID, SCMInputChangeReason, ISCMViewService, ISCMService } from 'vscode/vscode/vs/workbench/contrib/scm/common/scm';
9
9
  import { ResourceLabels } from 'vscode/vscode/vs/workbench/browser/labels';
10
10
  import { CountBadge } from 'vscode/vscode/vs/base/browser/ui/countBadge/countBadge';
11
11
  import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
@@ -14,7 +14,7 @@ import { IContextMenuService, IContextViewService } from 'vscode/vscode/vs/platf
14
14
  import { RawContextKey, ContextKeyExpr, IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
15
15
  import { ICommandService } from 'vscode/vscode/vs/platform/commands/common/commands';
16
16
  import { IKeybindingService } from 'vscode/vscode/vs/platform/keybinding/common/keybinding';
17
- import { MenuId, MenuRegistry, registerAction2, MenuItemAction, IMenuService, Action2 } from 'vscode/vscode/vs/platform/actions/common/actions';
17
+ import { MenuId, MenuRegistry, registerAction2, Action2, MenuItemAction, IMenuService } from 'vscode/vscode/vs/platform/actions/common/actions';
18
18
  import { Action, Separator, ActionRunner } from 'vscode/vscode/vs/base/common/actions';
19
19
  import { ActionBar } from 'vscode/vscode/vs/base/browser/ui/actionbar/actionbar';
20
20
  import { IThemeService } from 'vscode/vscode/vs/platform/theme/common/themeService';
@@ -40,6 +40,7 @@ import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
40
40
  import { EditorExtensionsRegistry } from 'vscode/vscode/vs/editor/browser/editorExtensions';
41
41
  import { MenuPreventer } from 'vscode/vscode/vs/workbench/contrib/codeEditor/browser/menuPreventer';
42
42
  import { SelectionClipboardContributionID } from 'vscode/vscode/vs/workbench/contrib/codeEditor/browser/selectionClipboard';
43
+ import { EditorDictation } from 'vscode/vscode/vs/workbench/contrib/codeEditor/browser/dictation/editorDictation';
43
44
  import { ContextMenuController } from 'vscode/vscode/vs/editor/contrib/contextmenu/browser/contextmenu';
44
45
  import { isMacintosh } from 'vscode/vscode/vs/base/common/platform';
45
46
  import { format, compare } from 'vscode/vscode/vs/base/common/strings';
@@ -81,12 +82,13 @@ import { EditOperation } from 'vscode/vscode/vs/editor/common/core/editOperation
81
82
  import { stripIcons } from 'vscode/vscode/vs/base/common/iconLabels';
82
83
  import { IconLabel } from 'vscode/vscode/vs/base/browser/ui/iconLabel/iconLabel';
83
84
  import { registerColor, transparent, foreground, listActiveSelectionForeground } from 'vscode/vscode/vs/platform/theme/common/colorRegistry';
84
- import { WorkbenchToolBar } from 'vscode/vscode/vs/platform/actions/browser/toolbar';
85
+ import { WorkbenchToolBar, MenuWorkbenchToolBar } from 'vscode/vscode/vs/platform/actions/browser/toolbar';
85
86
  import { CancellationTokenSource } from 'vscode/vscode/vs/base/common/cancellation';
86
87
  import { DropdownWithPrimaryActionViewItem } from 'vscode/vscode/vs/platform/actions/browser/dropdownWithPrimaryActionViewItem';
87
88
  import { clamp } from 'vscode/vscode/vs/base/common/numbers';
89
+ import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
88
90
 
89
- var ActionButtonRenderer_1, InputRenderer_1, ResourceGroupRenderer_1, ResourceRenderer_1, HistoryItemGroupRenderer_1, HistoryItemRenderer_1, HistoryItemChangeRenderer_1, SCMInputWidget_1;
91
+ var ActionButtonRenderer_1, InputRenderer_1, ResourceGroupRenderer_1, ResourceRenderer_1, HistoryItemGroupRenderer_1, HistoryItemRenderer_1, HistoryItemChangeRenderer_1, SeparatorRenderer_1, SCMInputWidget_1;
90
92
  registerColor('scm.historyItemAdditionsForeground', {
91
93
  dark: 'gitDecoration.addedResourceForeground',
92
94
  light: 'gitDecoration.addedResourceForeground',
@@ -647,10 +649,10 @@ let HistoryItemGroupRenderer = class HistoryItemGroupRenderer {
647
649
  const repositoryMenus = this.scmViewService.menus.getRepositoryMenus(historyItemGroup.repository.provider);
648
650
  const historyProviderMenu = repositoryMenus.historyProviderMenu;
649
651
  if (historyProviderMenu) {
650
- const menuId = historyItemGroup.direction === 'incoming' ? MenuId.SCMIncomingChanges : MenuId.SCMOutgoingChanges;
651
- const menu = historyItemGroup.direction === 'incoming' ? historyProviderMenu.incomingHistoryItemGroupMenu : historyProviderMenu.outgoingHistoryItemGroupMenu;
652
+ const menu = historyProviderMenu.getHistoryItemGroupMenu(historyItemGroup);
653
+ const resetMenuId = historyItemGroup.direction === 'incoming' ? MenuId.SCMIncomingChanges : MenuId.SCMOutgoingChanges;
652
654
  templateData.elementDisposables.add(connectPrimaryMenu(menu, (primary, secondary) => {
653
- templateData.toolBar.setActions(primary, secondary, [menuId]);
655
+ templateData.toolBar.setActions(primary, secondary, [resetMenuId]);
654
656
  }));
655
657
  templateData.toolBar.context = historyItemGroup;
656
658
  }
@@ -851,16 +853,37 @@ let HistoryItemChangeRenderer = class HistoryItemChangeRenderer {
851
853
  HistoryItemChangeRenderer = HistoryItemChangeRenderer_1 = ( __decorate([
852
854
  ( __param(2, ILabelService))
853
855
  ], HistoryItemChangeRenderer));
854
- class SeparatorRenderer {
856
+ let SeparatorRenderer = class SeparatorRenderer {
857
+ static { SeparatorRenderer_1 = this; }
855
858
  static { this.TEMPLATE_ID = 'separator'; }
856
- get templateId() { return SeparatorRenderer.TEMPLATE_ID; }
859
+ get templateId() { return SeparatorRenderer_1.TEMPLATE_ID; }
860
+ constructor(contextKeyService, contextMenuService, keybindingService, menuService, telemetryService) {
861
+ this.contextKeyService = contextKeyService;
862
+ this.contextMenuService = contextMenuService;
863
+ this.keybindingService = keybindingService;
864
+ this.menuService = menuService;
865
+ this.telemetryService = telemetryService;
866
+ }
857
867
  renderTemplate(container) {
858
868
  container.parentElement.parentElement.querySelector('.monaco-tl-twistie').classList.add('force-no-twistie');
859
869
  container.parentElement.parentElement.classList.add('cursor-default', 'force-no-hover');
870
+ const disposables = ( new DisposableStore());
860
871
  const element = append(container, $('.separator-container'));
861
872
  const label = ( new IconLabel(element, { supportIcons: true, }));
862
873
  append(element, $('.separator'));
863
- return { label, disposables: ( new DisposableStore()) };
874
+ disposables.add(label);
875
+ const toolBar = ( new MenuWorkbenchToolBar(
876
+ append(element, $('.actions')),
877
+ MenuId.SCMChangesSeparator,
878
+ { moreIcon: Codicon.gear },
879
+ this.menuService,
880
+ this.contextKeyService,
881
+ this.contextMenuService,
882
+ this.keybindingService,
883
+ this.telemetryService
884
+ ));
885
+ disposables.add(toolBar);
886
+ return { label, disposables };
864
887
  }
865
888
  renderElement(element, index, templateData, height) {
866
889
  templateData.label.setLabel(element.element.label, undefined, { title: element.element.ariaLabel });
@@ -869,9 +892,16 @@ class SeparatorRenderer {
869
892
  throw new Error('Should never happen since node is incompressible');
870
893
  }
871
894
  disposeTemplate(templateData) {
872
- throw new Error('Method not implemented.');
895
+ templateData.disposables.dispose();
873
896
  }
874
- }
897
+ };
898
+ SeparatorRenderer = SeparatorRenderer_1 = ( __decorate([
899
+ ( __param(0, IContextKeyService)),
900
+ ( __param(1, IContextMenuService)),
901
+ ( __param(2, IKeybindingService)),
902
+ ( __param(3, IMenuService)),
903
+ ( __param(4, ITelemetryService))
904
+ ], SeparatorRenderer));
875
905
  class ListDelegate {
876
906
  constructor(inputRenderer) {
877
907
  this.inputRenderer = inputRenderer;
@@ -1188,6 +1218,7 @@ SCMAccessibilityProvider = ( __decorate([
1188
1218
  const Menus = {
1189
1219
  ViewSort: ( new MenuId('SCMViewSort')),
1190
1220
  Repositories: ( new MenuId('SCMRepositories')),
1221
+ ChangesSettings: ( new MenuId('SCMChangesSettings')),
1191
1222
  };
1192
1223
  const ContextKeys = {
1193
1224
  SCMViewMode: ( new RawContextKey('scmViewMode', "list" )),
@@ -1211,7 +1242,19 @@ MenuRegistry.appendMenuItem(MenuId.SCMTitle, {
1211
1242
  )),
1212
1243
  submenu: Menus.ViewSort,
1213
1244
  when: ( ContextKeyExpr.and(( ContextKeyExpr.equals('view', VIEW_PANE_ID)), ( ContextKeys.RepositoryCount.notEqualsTo(0)))),
1214
- group: '0_view&sort'
1245
+ group: '0_view&sort',
1246
+ order: 1
1247
+ });
1248
+ MenuRegistry.appendMenuItem(MenuId.SCMTitle, {
1249
+ title: ( localizeWithPath(
1250
+ 'vs/workbench/contrib/scm/browser/scmViewPane',
1251
+ 'scmChanges',
1252
+ "Incoming & Outgoing"
1253
+ )),
1254
+ submenu: Menus.ChangesSettings,
1255
+ when: ( ContextKeyExpr.and(( ContextKeyExpr.equals('view', VIEW_PANE_ID)), ( ContextKeys.RepositoryCount.notEqualsTo(0)))),
1256
+ group: '0_view&sort',
1257
+ order: 2
1215
1258
  });
1216
1259
  MenuRegistry.appendMenuItem(Menus.ViewSort, {
1217
1260
  title: ( localizeWithPath(
@@ -1220,8 +1263,151 @@ MenuRegistry.appendMenuItem(Menus.ViewSort, {
1220
1263
  "Repositories"
1221
1264
  )),
1222
1265
  submenu: Menus.Repositories,
1266
+ when: ContextKeyExpr.greater(ContextKeys.RepositoryCount.key, 1),
1223
1267
  group: '0_repositories'
1224
1268
  });
1269
+ class SCMChangesSettingAction extends Action2 {
1270
+ constructor(settingKey, settingValue, desc) {
1271
+ super({
1272
+ ...desc,
1273
+ f1: false,
1274
+ toggled: ( ContextKeyExpr.equals(`config.${settingKey}`, settingValue)),
1275
+ });
1276
+ this.settingKey = settingKey;
1277
+ this.settingValue = settingValue;
1278
+ }
1279
+ run(accessor) {
1280
+ const configurationService = accessor.get(IConfigurationService);
1281
+ configurationService.updateValue(this.settingKey, this.settingValue);
1282
+ }
1283
+ }
1284
+ MenuRegistry.appendMenuItem(MenuId.SCMChangesSeparator, {
1285
+ title: ( localizeWithPath(
1286
+ 'vs/workbench/contrib/scm/browser/scmViewPane',
1287
+ 'incomingChanges',
1288
+ "Show Incoming Changes"
1289
+ )),
1290
+ submenu: MenuId.SCMIncomingChangesSetting,
1291
+ group: '1_incoming&outgoing',
1292
+ order: 1
1293
+ });
1294
+ MenuRegistry.appendMenuItem(Menus.ChangesSettings, {
1295
+ title: ( localizeWithPath(
1296
+ 'vs/workbench/contrib/scm/browser/scmViewPane',
1297
+ 'incomingChanges',
1298
+ "Show Incoming Changes"
1299
+ )),
1300
+ submenu: MenuId.SCMIncomingChangesSetting,
1301
+ group: '1_incoming&outgoing',
1302
+ order: 1
1303
+ });
1304
+ registerAction2(class extends SCMChangesSettingAction {
1305
+ constructor() {
1306
+ super('scm.showIncomingChanges', 'always', {
1307
+ id: 'workbench.scm.action.showIncomingChanges.always',
1308
+ title: ( localizeWithPath('vs/workbench/contrib/scm/browser/scmViewPane', 'always', "Always")),
1309
+ menu: { id: MenuId.SCMIncomingChangesSetting },
1310
+ });
1311
+ }
1312
+ });
1313
+ registerAction2(class extends SCMChangesSettingAction {
1314
+ constructor() {
1315
+ super('scm.showIncomingChanges', 'auto', {
1316
+ id: 'workbench.scm.action.showIncomingChanges.auto',
1317
+ title: ( localizeWithPath('vs/workbench/contrib/scm/browser/scmViewPane', 'auto', "Auto")),
1318
+ menu: {
1319
+ id: MenuId.SCMIncomingChangesSetting,
1320
+ }
1321
+ });
1322
+ }
1323
+ });
1324
+ registerAction2(class extends SCMChangesSettingAction {
1325
+ constructor() {
1326
+ super('scm.showIncomingChanges', 'never', {
1327
+ id: 'workbench.scm.action.showIncomingChanges.never',
1328
+ title: ( localizeWithPath('vs/workbench/contrib/scm/browser/scmViewPane', 'never', "Never")),
1329
+ menu: {
1330
+ id: MenuId.SCMIncomingChangesSetting,
1331
+ }
1332
+ });
1333
+ }
1334
+ });
1335
+ MenuRegistry.appendMenuItem(MenuId.SCMChangesSeparator, {
1336
+ title: ( localizeWithPath(
1337
+ 'vs/workbench/contrib/scm/browser/scmViewPane',
1338
+ 'outgoingChanges',
1339
+ "Show Outgoing Changes"
1340
+ )),
1341
+ submenu: MenuId.SCMOutgoingChangesSetting,
1342
+ group: '1_incoming&outgoing',
1343
+ order: 2
1344
+ });
1345
+ MenuRegistry.appendMenuItem(Menus.ChangesSettings, {
1346
+ title: ( localizeWithPath(
1347
+ 'vs/workbench/contrib/scm/browser/scmViewPane',
1348
+ 'outgoingChanges',
1349
+ "Show Outgoing Changes"
1350
+ )),
1351
+ submenu: MenuId.SCMOutgoingChangesSetting,
1352
+ group: '1_incoming&outgoing',
1353
+ order: 2
1354
+ });
1355
+ registerAction2(class extends SCMChangesSettingAction {
1356
+ constructor() {
1357
+ super('scm.showOutgoingChanges', 'always', {
1358
+ id: 'workbench.scm.action.showOutgoingChanges.always',
1359
+ title: ( localizeWithPath('vs/workbench/contrib/scm/browser/scmViewPane', 'always', "Always")),
1360
+ menu: {
1361
+ id: MenuId.SCMOutgoingChangesSetting,
1362
+ }
1363
+ });
1364
+ }
1365
+ });
1366
+ registerAction2(class extends SCMChangesSettingAction {
1367
+ constructor() {
1368
+ super('scm.showOutgoingChanges', 'auto', {
1369
+ id: 'workbench.scm.action.showOutgoingChanges.auto',
1370
+ title: ( localizeWithPath('vs/workbench/contrib/scm/browser/scmViewPane', 'auto', "Auto")),
1371
+ menu: {
1372
+ id: MenuId.SCMOutgoingChangesSetting,
1373
+ }
1374
+ });
1375
+ }
1376
+ });
1377
+ registerAction2(class extends SCMChangesSettingAction {
1378
+ constructor() {
1379
+ super('scm.showOutgoingChanges', 'never', {
1380
+ id: 'workbench.scm.action.showOutgoingChanges.never',
1381
+ title: ( localizeWithPath('vs/workbench/contrib/scm/browser/scmViewPane', 'never', "Never")),
1382
+ menu: {
1383
+ id: MenuId.SCMOutgoingChangesSetting,
1384
+ }
1385
+ });
1386
+ }
1387
+ });
1388
+ registerAction2(class extends Action2 {
1389
+ constructor() {
1390
+ super({
1391
+ id: 'workbench.scm.action.scm.showChangesSummary',
1392
+ title: ( localizeWithPath(
1393
+ 'vs/workbench/contrib/scm/browser/scmViewPane',
1394
+ 'showChangesSummary',
1395
+ "Show Changes Summary"
1396
+ )),
1397
+ f1: false,
1398
+ toggled: ( ContextKeyExpr.equals('config.scm.showChangesSummary', true)),
1399
+ menu: [
1400
+ { id: MenuId.SCMChangesSeparator, order: 3 },
1401
+ { id: Menus.ChangesSettings, order: 3 },
1402
+ ]
1403
+ });
1404
+ }
1405
+ run(accessor) {
1406
+ const configurationService = accessor.get(IConfigurationService);
1407
+ const configValue = configurationService.getValue('scm.showChangesSummary') === true;
1408
+ configurationService.updateValue('scm.showChangesSummary', !configValue);
1409
+ }
1410
+ });
1225
1411
  class RepositoryVisibilityAction extends Action2 {
1226
1412
  constructor(repository) {
1227
1413
  super({
@@ -1381,8 +1567,7 @@ class RepositorySortAction extends ViewAction {
1381
1567
  group: '1_sort'
1382
1568
  },
1383
1569
  {
1384
- id: MenuId.ViewTitle,
1385
- when: ( ContextKeyExpr.equals('view', REPOSITORIES_VIEW_PANE_ID)),
1570
+ id: MenuId.SCMSourceControlTitle,
1386
1571
  group: '1_sort',
1387
1572
  },
1388
1573
  ]
@@ -1893,7 +2078,8 @@ let SCMInputWidget = class SCMInputWidget {
1893
2078
  SuggestController.ID,
1894
2079
  InlineCompletionsController.ID,
1895
2080
  CodeActionController.ID,
1896
- FormatOnType.ID
2081
+ FormatOnType.ID,
2082
+ EditorDictation.ID
1897
2083
  ])
1898
2084
  };
1899
2085
  const services = ( new ServiceCollection([IContextKeyService, this.contextKeyService]));
@@ -1931,11 +2117,11 @@ let SCMInputWidget = class SCMInputWidget {
1931
2117
  Event.filter(this.configurationService.onDidChangeConfiguration, e => e.affectsConfiguration('scm.showInputActionButton'))(() => this.layout(), this, this.disposables);
1932
2118
  this.onDidChangeContentHeight = Event.signal(Event.filter(this.inputEditor.onDidContentSizeChange, e => e.contentHeightChanged, this.disposables));
1933
2119
  this.toolbar = instantiationService2.createInstance(SCMInputWidgetToolbar, this.toolbarContainer, {
1934
- actionViewItemProvider: action => {
2120
+ actionViewItemProvider: (action, options) => {
1935
2121
  if (action instanceof MenuItemAction && this.toolbar.dropdownActions.length > 1) {
1936
- return instantiationService.createInstance(DropdownWithPrimaryActionViewItem, action, this.toolbar.dropdownAction, this.toolbar.dropdownActions, '', this.contextMenuService, { actionRunner: this.toolbar.actionRunner });
2122
+ return instantiationService.createInstance(DropdownWithPrimaryActionViewItem, action, this.toolbar.dropdownAction, this.toolbar.dropdownActions, '', this.contextMenuService, { actionRunner: this.toolbar.actionRunner, hoverDelegate: options.hoverDelegate });
1937
2123
  }
1938
- return createActionViewItem(instantiationService, action);
2124
+ return createActionViewItem(instantiationService, action, options);
1939
2125
  },
1940
2126
  menuOptions: {
1941
2127
  shouldForwardArgs: true
@@ -1945,8 +2131,8 @@ let SCMInputWidget = class SCMInputWidget {
1945
2131
  this.disposables.add(this.toolbar);
1946
2132
  }
1947
2133
  getContentHeight() {
1948
- const lineHeight = this.inputEditor.getOption(66 );
1949
- const { top, bottom } = this.inputEditor.getOption(83 );
2134
+ const lineHeight = this.inputEditor.getOption(67 );
2135
+ const { top, bottom } = this.inputEditor.getOption(84 );
1950
2136
  const inputMinLinesConfig = this.configurationService.getValue('scm.inputMinLineCount');
1951
2137
  const inputMinLines = typeof inputMinLinesConfig === 'number' ? clamp(inputMinLinesConfig, 1, 50) : 1;
1952
2138
  const editorMinHeight = inputMinLines * lineHeight + top + bottom;
@@ -2125,10 +2311,11 @@ let SCMViewPane = class SCMViewPane extends ViewPane {
2125
2311
  this.storageService.store(`scm.viewSortKey`, sortKey, 1 , 0 );
2126
2312
  }
2127
2313
  }
2128
- constructor(options, commandService, editorService, menuService, scmService, scmViewService, storageService, uriIdentityService, keybindingService, themeService, contextMenuService, instantiationService, viewDescriptorService, configurationService, contextKeyService, openerService, telemetryService) {
2314
+ constructor(options, commandService, editorService, logService, menuService, scmService, scmViewService, storageService, uriIdentityService, keybindingService, themeService, contextMenuService, instantiationService, viewDescriptorService, configurationService, contextKeyService, openerService, telemetryService) {
2129
2315
  super({ ...options, titleMenuId: MenuId.SCMTitle }, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService);
2130
2316
  this.commandService = commandService;
2131
2317
  this.editorService = editorService;
2318
+ this.logService = logService;
2132
2319
  this.menuService = menuService;
2133
2320
  this.scmService = scmService;
2134
2321
  this.scmViewService = scmViewService;
@@ -2418,9 +2605,17 @@ let SCMViewPane = class SCMViewPane extends ViewPane {
2418
2605
  repositoryDisposables.add(repository.provider.onDidChange(() => this.updateChildren(repository)));
2419
2606
  repositoryDisposables.add(repository.input.onDidChangeVisibility(() => this.updateChildren(repository)));
2420
2607
  repositoryDisposables.add(repository.provider.onDidChangeResourceGroups(() => this.updateChildren(repository)));
2421
- if (repository.provider.historyProvider) {
2422
- repositoryDisposables.add(repository.provider.historyProvider.onDidChangeCurrentHistoryItemGroup(() => this.updateChildren(repository)));
2423
- }
2608
+ repositoryDisposables.add(Event.runAndSubscribe(repository.provider.onDidChangeHistoryProvider, () => {
2609
+ if (!repository.provider.historyProvider) {
2610
+ this.logService.debug('SCMViewPane:onDidChangeVisibleRepositories - no history provider present');
2611
+ return;
2612
+ }
2613
+ repositoryDisposables.add(repository.provider.historyProvider.onDidChangeCurrentHistoryItemGroup(() => {
2614
+ this.updateChildren(repository);
2615
+ this.logService.debug('SCMViewPane:onDidChangeCurrentHistoryItemGroup - update children');
2616
+ }));
2617
+ this.logService.debug('SCMViewPane:onDidChangeVisibleRepositories - onDidChangeCurrentHistoryItemGroup listener added');
2618
+ }));
2424
2619
  const resourceGroupDisposables = repositoryDisposables.add(( new DisposableMap()));
2425
2620
  const onDidChangeResourceGroups = () => {
2426
2621
  for (const [resourceGroup] of resourceGroupDisposables) {
@@ -2463,10 +2658,12 @@ let SCMViewPane = class SCMViewPane extends ViewPane {
2463
2658
  const element = e.element;
2464
2659
  let context = element;
2465
2660
  let actions = [];
2661
+ let actionRunner = ( new RepositoryPaneActionRunner(() => this.getSelectedResources()));
2466
2662
  if (isSCMRepository(element)) {
2467
2663
  const menus = this.scmViewService.menus.getRepositoryMenus(element.provider);
2468
2664
  const menu = menus.repositoryContextMenu;
2469
2665
  context = element.provider;
2666
+ actionRunner = ( new RepositoryActionRunner(() => this.getSelectedRepositories()));
2470
2667
  actions = collectContextMenuActions(menu);
2471
2668
  }
2472
2669
  else if (isSCMInput(element) || isSCMActionButton(element)) ;
@@ -2492,9 +2689,22 @@ let SCMViewPane = class SCMViewPane extends ViewPane {
2492
2689
  actions = collectContextMenuActions(menu);
2493
2690
  }
2494
2691
  }
2495
- const actionRunner = isSCMRepository(element) ?
2496
- ( new RepositoryActionRunner(() => this.getSelectedRepositories())) :
2497
- ( new RepositoryPaneActionRunner(() => this.getSelectedResources()));
2692
+ else if (isSCMHistoryItemGroupTreeElement(element)) {
2693
+ const menus = this.scmViewService.menus.getRepositoryMenus(element.repository.provider);
2694
+ const menu = menus.historyProviderMenu?.getHistoryItemGroupContextMenu(element);
2695
+ if (menu) {
2696
+ actionRunner = ( new HistoryItemGroupActionRunner());
2697
+ createAndFillInContextMenuActions(menu, { shouldForwardArgs: true }, actions);
2698
+ }
2699
+ }
2700
+ else if (isSCMHistoryItemTreeElement(element)) {
2701
+ const menus = this.scmViewService.menus.getRepositoryMenus(element.historyItemGroup.repository.provider);
2702
+ const menu = menus.historyProviderMenu?.getHistoryItemMenu(element);
2703
+ if (menu) {
2704
+ actionRunner = ( new HistoryItemActionRunner());
2705
+ actions = collectContextMenuActions(menu);
2706
+ }
2707
+ }
2498
2708
  actionRunner.onWillRun(() => this.tree.domFocus());
2499
2709
  this.contextMenuService.showContextMenu({
2500
2710
  getAnchor: () => e.anchor,
@@ -2653,25 +2863,27 @@ let SCMViewPane = class SCMViewPane extends ViewPane {
2653
2863
  SCMViewPane = ( __decorate([
2654
2864
  ( __param(1, ICommandService)),
2655
2865
  ( __param(2, IEditorService)),
2656
- ( __param(3, IMenuService)),
2657
- ( __param(4, ISCMService)),
2658
- ( __param(5, ISCMViewService)),
2659
- ( __param(6, IStorageService)),
2660
- ( __param(7, IUriIdentityService)),
2661
- ( __param(8, IKeybindingService)),
2662
- ( __param(9, IThemeService)),
2663
- ( __param(10, IContextMenuService)),
2664
- ( __param(11, IInstantiationService)),
2665
- ( __param(12, IViewDescriptorService)),
2666
- ( __param(13, IConfigurationService)),
2667
- ( __param(14, IContextKeyService)),
2668
- ( __param(15, IOpenerService)),
2669
- ( __param(16, ITelemetryService))
2866
+ ( __param(3, ILogService)),
2867
+ ( __param(4, IMenuService)),
2868
+ ( __param(5, ISCMService)),
2869
+ ( __param(6, ISCMViewService)),
2870
+ ( __param(7, IStorageService)),
2871
+ ( __param(8, IUriIdentityService)),
2872
+ ( __param(9, IKeybindingService)),
2873
+ ( __param(10, IThemeService)),
2874
+ ( __param(11, IContextMenuService)),
2875
+ ( __param(12, IInstantiationService)),
2876
+ ( __param(13, IViewDescriptorService)),
2877
+ ( __param(14, IConfigurationService)),
2878
+ ( __param(15, IContextKeyService)),
2879
+ ( __param(16, IOpenerService)),
2880
+ ( __param(17, ITelemetryService))
2670
2881
  ], SCMViewPane));
2671
2882
  let SCMTreeDataSource = class SCMTreeDataSource {
2672
- constructor(viewMode, configurationService, scmViewService, uriIdentityService) {
2883
+ constructor(viewMode, configurationService, logService, scmViewService, uriIdentityService) {
2673
2884
  this.viewMode = viewMode;
2674
2885
  this.configurationService = configurationService;
2886
+ this.logService = logService;
2675
2887
  this.scmViewService = scmViewService;
2676
2888
  this.uriIdentityService = uriIdentityService;
2677
2889
  this.historyProviderCache = ( new Map());
@@ -2827,7 +3039,7 @@ let SCMTreeDataSource = class SCMTreeDataSource {
2827
3039
  const historyProviderCacheEntry = this.getHistoryProviderCacheEntry(element);
2828
3040
  let incomingHistoryItemGroup = historyProviderCacheEntry?.incomingHistoryItemGroup;
2829
3041
  let outgoingHistoryItemGroup = historyProviderCacheEntry?.outgoingHistoryItemGroup;
2830
- if (!incomingHistoryItemGroup || !outgoingHistoryItemGroup) {
3042
+ if (!incomingHistoryItemGroup && !outgoingHistoryItemGroup) {
2831
3043
  const ancestor = await historyProvider.resolveHistoryItemGroupCommonAncestor(currentHistoryItemGroup.id, currentHistoryItemGroup.base?.id);
2832
3044
  if (!ancestor) {
2833
3045
  return [];
@@ -3009,9 +3221,17 @@ let SCMTreeDataSource = class SCMTreeDataSource {
3009
3221
  onDidChangeVisibleRepositories({ added, removed }) {
3010
3222
  for (const repository of added) {
3011
3223
  const repositoryDisposables = ( new DisposableStore());
3012
- if (repository.provider.historyProvider) {
3013
- repositoryDisposables.add(repository.provider.historyProvider.onDidChangeCurrentHistoryItemGroup(() => this.historyProviderCache.delete(repository)));
3014
- }
3224
+ repositoryDisposables.add(Event.runAndSubscribe(repository.provider.onDidChangeHistoryProvider, () => {
3225
+ if (!repository.provider.historyProvider) {
3226
+ this.logService.debug('SCMTreeDataSource:onDidChangeVisibleRepositories - no history provider present');
3227
+ return;
3228
+ }
3229
+ repositoryDisposables.add(repository.provider.historyProvider.onDidChangeCurrentHistoryItemGroup(() => {
3230
+ this.historyProviderCache.delete(repository);
3231
+ this.logService.debug('SCMTreeDataSource:onDidChangeCurrentHistoryItemGroup - cache cleared');
3232
+ }));
3233
+ this.logService.debug('SCMTreeDataSource:onDidChangeVisibleRepositories - onDidChangeCurrentHistoryItemGroup listener added');
3234
+ }));
3015
3235
  this.repositoryDisposables.set(repository, repositoryDisposables);
3016
3236
  }
3017
3237
  for (const repository of removed) {
@@ -3034,8 +3254,9 @@ let SCMTreeDataSource = class SCMTreeDataSource {
3034
3254
  };
3035
3255
  SCMTreeDataSource = ( __decorate([
3036
3256
  ( __param(1, IConfigurationService)),
3037
- ( __param(2, ISCMViewService)),
3038
- ( __param(3, IUriIdentityService))
3257
+ ( __param(2, ILogService)),
3258
+ ( __param(3, ISCMViewService)),
3259
+ ( __param(4, IUriIdentityService))
3039
3260
  ], SCMTreeDataSource));
3040
3261
  class SCMActionButton {
3041
3262
  constructor(container, contextMenuService, commandService, notificationService) {
@@ -100,8 +100,8 @@ class StatusBarAction extends Action {
100
100
  }
101
101
  }
102
102
  class StatusBarActionViewItem extends ActionViewItem {
103
- constructor(action) {
104
- super(null, action, {});
103
+ constructor(action, options) {
104
+ super(null, action, { ...options, icon: false, label: true });
105
105
  }
106
106
  updateLabel() {
107
107
  if (this.options.label && this.label) {
@@ -110,11 +110,11 @@ class StatusBarActionViewItem extends ActionViewItem {
110
110
  }
111
111
  }
112
112
  function getActionViewItemProvider(instaService) {
113
- return action => {
113
+ return (action, options) => {
114
114
  if (action instanceof StatusBarAction) {
115
- return ( new StatusBarActionViewItem(action));
115
+ return ( new StatusBarActionViewItem(action, options));
116
116
  }
117
- return createActionViewItem(instaService, action);
117
+ return createActionViewItem(instaService, action, options);
118
118
  };
119
119
  }
120
120