diff --git a/extensions/git/package.json b/extensions/git/package.json index ad2479469e3..202d73c4c00 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -336,35 +336,35 @@ }, { "command": "git.close", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.refresh", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.openFile", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.openHEADFile", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.openChange", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stage", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stageAll", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stageSelectedRanges", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stageChange", @@ -372,7 +372,7 @@ }, { "command": "git.revertSelectedRanges", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.revertChange", @@ -384,147 +384,147 @@ }, { "command": "git.unstage", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.unstageAll", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.unstageSelectedRanges", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.clean", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.cleanAll", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commit", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commitStaged", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commitStagedSigned", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commitStagedAmend", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commitAll", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commitAllSigned", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.commitAllAmend", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.undoCommit", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.checkout", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.branch", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.deleteBranch", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.renameBranch", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.pull", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.pullFrom", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.pullRebase", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.pullFrom", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.merge", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.createTag", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.fetch", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.push", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.pushTo", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.pushWithTags", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.sync", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.syncRebase", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.publish", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.showOutput", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.ignore", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stashIncludeUntracked", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stash", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stashPop", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.stashPopLatest", - "when": "gitOpenRepositoryCount != 0" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" } ], "scm/title": [ @@ -809,27 +809,27 @@ { "command": "git.openFile", "group": "navigation", - "when": "gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != extension && resourceScheme != merge-conflict.conflict-diff" + "when": "config.git.enabled && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != extension && resourceScheme != merge-conflict.conflict-diff" }, { "command": "git.openChange", "group": "navigation", - "when": "gitOpenRepositoryCount != 0 && !isInDiffEditor && resourceScheme == file" + "when": "config.git.enabled && gitOpenRepositoryCount != 0 && !isInDiffEditor && resourceScheme == file" }, { "command": "git.stageSelectedRanges", "group": "2_git@1", - "when": "gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != merge-conflict.conflict-diff" + "when": "config.git.enabled && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != merge-conflict.conflict-diff" }, { "command": "git.unstageSelectedRanges", "group": "2_git@2", - "when": "gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != merge-conflict.conflict-diff" + "when": "config.git.enabled && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != merge-conflict.conflict-diff" }, { "command": "git.revertSelectedRanges", "group": "2_git@3", - "when": "gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != merge-conflict.conflict-diff" + "when": "config.git.enabled && gitOpenRepositoryCount != 0 && isInDiffEditor && resourceScheme != merge-conflict.conflict-diff" } ], "scm/change/title": [ @@ -959,6 +959,7 @@ }, "git.detectSubmodules": { "type": "boolean", + "scope": "resource", "default": true, "description": "%config.detectSubmodules%" } diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts index c00b71b12af..3de488c35dd 100644 --- a/extensions/git/src/main.ts +++ b/extensions/git/src/main.ts @@ -14,7 +14,7 @@ import { CommandCenter } from './commands'; import { GitContentProvider } from './contentProvider'; import { GitDecorations } from './decorationProvider'; import { Askpass } from './askpass'; -import { toDisposable } from './util'; +import { toDisposable, filterEvent, mapEvent, eventToPromise } from './util'; import TelemetryReporter from 'vscode-extension-telemetry'; import { API, createApi } from './api'; @@ -93,11 +93,27 @@ async function _activate(context: ExtensionContext, disposables: Disposable[]): } export function activate(context: ExtensionContext): API { + const config = workspace.getConfiguration('git', null as any as undefined); + const enabled = config.get('enabled'); + const disposables: Disposable[] = []; context.subscriptions.push(new Disposable(() => Disposable.from(...disposables).dispose())); - const activatePromise = _activate(context, disposables); - const modelPromise = activatePromise.then(model => model || Promise.reject('Git model not found')); + let activatePromise: Promise; + + if (enabled) { + activatePromise = _activate(context, disposables); + } else { + const onConfigChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git', null as any as undefined)); + const onEnabled = filterEvent(onConfigChange, () => workspace.getConfiguration('git', null as any as undefined).get('enabled') === true); + + activatePromise = eventToPromise(onEnabled) + .then(() => _activate(context, disposables)); + } + + const modelPromise = activatePromise + .then(model => model || Promise.reject('Git model not found')); + activatePromise.catch(err => console.error(err)); return createApi(modelPromise);