From da1a21d1de550666a27f42655bb348632000d387 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Tue, 31 Jan 2017 17:06:21 +0100 Subject: [PATCH] git: countBadge config --- extensions/git/package.json | 15 ++++++++++++++- extensions/git/package.nls.json | 3 ++- extensions/git/src/scmProvider.ts | 12 +++++++++++- src/vs/vscode.proposed.d.ts | 3 ++- src/vs/workbench/api/node/extHost.protocol.ts | 2 +- src/vs/workbench/api/node/extHostSCM.ts | 2 +- src/vs/workbench/api/node/mainThreadSCM.ts | 10 +++++++--- .../parts/scm/electron-browser/scmActivity.ts | 9 ++++++++- src/vs/workbench/services/scm/common/scm.ts | 1 + 9 files changed, 47 insertions(+), 10 deletions(-) diff --git a/extensions/git/package.json b/extensions/git/package.json index 96014fb5deb..8bd1ebfd30e 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -374,7 +374,10 @@ "title": "Git", "properties": { "git.path": { - "type": ["string", "null"], + "type": [ + "string", + "null" + ], "description": "%config.path%", "default": null, "isExecutable": true @@ -393,6 +396,16 @@ "type": "boolean", "description": "%config.enableLongCommitWarning%", "default": true + }, + "git.countBadge": { + "type": "string", + "enum": [ + "all", + "tracked", + "off" + ], + "description": "%config.countBadge%", + "default": "all" } } } diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index ed4c311189f..566ac840284 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -26,5 +26,6 @@ "config.path": "Path to the git executable", "config.autorefresh": "Whether auto refreshing is enabled", "config.autofetch": "Whether auto fetching is enabled", - "config.enableLongCommitWarning": "Whether long commit messages should be warned about" + "config.enableLongCommitWarning": "Whether long commit messages should be warned about", + "config.countBadge": "Controls the git badge counter" } \ No newline at end of file diff --git a/extensions/git/src/scmProvider.ts b/extensions/git/src/scmProvider.ts index f06078c31bc..3a764d6259c 100644 --- a/extensions/git/src/scmProvider.ts +++ b/extensions/git/src/scmProvider.ts @@ -5,7 +5,7 @@ 'use strict'; -import { scm, Uri, Disposable, SCMProvider, SCMResourceGroup, Event, ProviderResult } from 'vscode'; +import { scm, Uri, Disposable, SCMProvider, SCMResourceGroup, Event, ProviderResult, workspace } from 'vscode'; import { Model, Resource, ResourceGroup } from './model'; import { CommandCenter } from './commands'; @@ -17,6 +17,16 @@ export class GitSCMProvider implements SCMProvider { get onDidChange(): Event { return this.model.onDidChange; } get label(): string { return 'Git'; } + get count(): number { + const countBadge = workspace.getConfiguration('git').get('countBadge'); + + switch (countBadge) { + case 'off': return 0; + case 'tracked': return this.model.indexGroup.resources.length; + default: return this.model.resources.reduce((r, g) => r + g.resources.length, 0); + } + } + constructor(private model: Model, private commandCenter: CommandCenter) { scm.registerSCMProvider('git', this); } diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 5c8ada4b6b7..8f6deb35339 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -133,8 +133,9 @@ declare module 'vscode' { readonly label: string; readonly resources: SCMResourceGroup[]; readonly onDidChange: Event; - getOriginalResource?(uri: Uri, token: CancellationToken): ProviderResult; + readonly count?: number | undefined; + getOriginalResource?(uri: Uri, token: CancellationToken): ProviderResult; open?(resource: SCMResource, token: CancellationToken): ProviderResult; drag?(resource: SCMResource, resourceGroup: SCMResourceGroup, token: CancellationToken): ProviderResult; } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 9adb5912e4b..f08c6498385 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -257,7 +257,7 @@ export type SCMRawResourceGroup = [string /*id*/, string /*label*/, SCMRawResour export abstract class MainThreadSCMShape { $register(id: string, features: SCMProviderFeatures): void { throw ni(); } $unregister(id: string): void { throw ni(); } - $onChange(id: string, resources: SCMRawResourceGroup[]): void { throw ni(); } + $onChange(id: string, resources: SCMRawResourceGroup[], count: number | undefined): void { throw ni(); } } // -- extension host diff --git a/src/vs/workbench/api/node/extHostSCM.ts b/src/vs/workbench/api/node/extHostSCM.ts index 9df773b0e47..05c0a16baf1 100644 --- a/src/vs/workbench/api/node/extHostSCM.ts +++ b/src/vs/workbench/api/node/extHostSCM.ts @@ -151,7 +151,7 @@ export class ExtHostSCM { return [g.id, g.label, rawResources] as SCMRawResourceGroup; }); - this._proxy.$onChange(providerId, rawResourceGroups); + this._proxy.$onChange(providerId, rawResourceGroups, provider.count); }); return new Disposable(() => { diff --git a/src/vs/workbench/api/node/mainThreadSCM.ts b/src/vs/workbench/api/node/mainThreadSCM.ts index 7470f97dc15..097981ac59a 100644 --- a/src/vs/workbench/api/node/mainThreadSCM.ts +++ b/src/vs/workbench/api/node/mainThreadSCM.ts @@ -27,6 +27,9 @@ class MainThreadSCMProvider implements ISCMProvider { get id(): string { return this._id; } get label(): string { return this.features.label; } + private _count: number | undefined = undefined; + get count(): number | undefined { return this._count; } + constructor( private _id: string, private proxy: ExtHostSCMShape, @@ -68,7 +71,7 @@ class MainThreadSCMProvider implements ISCMProvider { // } } - $onChange(rawResourceGroups: SCMRawResourceGroup[]): void { + $onChange(rawResourceGroups: SCMRawResourceGroup[], count: number | undefined): void { this._resources = rawResourceGroups.map(rawGroup => { const [id, label, rawResources] = rawGroup; @@ -93,6 +96,7 @@ class MainThreadSCMProvider implements ISCMProvider { return { id, label, resources }; }); + this._count = count; this._onDidChange.fire(this.resources); } @@ -130,14 +134,14 @@ export class MainThreadSCM extends MainThreadSCMShape { delete this.providers[id]; } - $onChange(id: string, rawResourceGroups: SCMRawResourceGroup[]): void { + $onChange(id: string, rawResourceGroups: SCMRawResourceGroup[], count: number | undefined): void { const provider = this.providers[id]; if (!provider) { return; } - provider.$onChange(rawResourceGroups); + provider.$onChange(rawResourceGroups, count); } dispose(): void { diff --git a/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts b/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts index 214b25850b0..4abe15c32e6 100644 --- a/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts +++ b/src/vs/workbench/parts/scm/electron-browser/scmActivity.ts @@ -41,8 +41,15 @@ export class StatusUpdater implements IWorkbenchContribution { private update(): void { const provider = this.scmService.activeProvider; - const count = provider ? provider.resources.reduce((r, g) => r + g.resources.length, 0) : 0; + let count = 0; + if (provider) { + if (typeof provider.count === 'number') { + count = provider.count; + } else { + count = provider.resources.reduce((r, g) => r + g.resources.length, 0); + } + } if (count > 0) { const badge = new NumberBadge(count, num => localize('scmPendingChangesBadge', '{0} pending changes', num)); diff --git a/src/vs/workbench/services/scm/common/scm.ts b/src/vs/workbench/services/scm/common/scm.ts index d6b592da321..b22c3b79319 100644 --- a/src/vs/workbench/services/scm/common/scm.ts +++ b/src/vs/workbench/services/scm/common/scm.ts @@ -40,6 +40,7 @@ export interface ISCMProvider extends IDisposable { readonly label: string; readonly resources: ISCMResourceGroup[]; readonly onDidChange: Event; + readonly count?: number | undefined; open(uri: ISCMResource): TPromise; drag(from: ISCMResource, to: ISCMResourceGroup): TPromise; -- GitLab