diff --git a/extensions/git/src/model.ts b/extensions/git/src/model.ts index 14ee4d66e74..1914f1fb134 100644 --- a/extensions/git/src/model.ts +++ b/extensions/git/src/model.ts @@ -5,7 +5,7 @@ import { workspace, WorkspaceFoldersChangeEvent, Uri, window, Event, EventEmitter, QuickPickItem, Disposable, SourceControl, SourceControlResourceGroup, TextEditor, Memento, commands } from 'vscode'; import TelemetryReporter from '@vscode/extension-telemetry'; -import { Repository, RepositoryState } from './repository'; +import { Operation, Repository, RepositoryState } from './repository'; import { memoize, sequentialize, debounce } from './decorators'; import { dispose, anyEvent, filterEvent, isDescendant, pathEquals, toDisposable, eventToPromise } from './util'; import { Git } from './git'; @@ -467,11 +467,28 @@ export class Model implements IRemoteSourcePublisherRegistry, IPostCommitCommand }); checkForSubmodules(); + const updateCommitInProgressContext = () => { + let commitInProgress = false; + for (const { repository } of this.openRepositories.values()) { + if (repository.operations.isRunning(Operation.Commit)) { + commitInProgress = true; + break; + } + } + + commands.executeCommand('setContext', 'commitInProgress', commitInProgress); + }; + + const operationEvent = anyEvent(repository.onDidRunOperation as Event, repository.onRunOperation as Event); + const operationListener = operationEvent(() => updateCommitInProgressContext()); + updateCommitInProgressContext(); + const dispose = () => { disappearListener.dispose(); changeListener.dispose(); originalResourceChangeListener.dispose(); statusListener.dispose(); + operationListener.dispose(); repository.dispose(); this.openRepositories = this.openRepositories.filter(e => e !== openRepository); diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 83120afcdc5..48dbdd5065d 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -460,10 +460,8 @@ class ProgressManager { this.updateEnablement(); this.repository.onDidChangeOperations(() => { - const commitInProgress = this.repository.operations.isRunning(Operation.Commit); - - this.repository.sourceControl.inputBox.enabled = !commitInProgress; - commands.executeCommand('setContext', 'commitInProgress', commitInProgress); + // Disable input box when the commit operation is running + this.repository.sourceControl.inputBox.enabled = !this.repository.operations.isRunning(Operation.Commit); }); }