From d5664e35ed8e4bbde75c9f27373f26f04e3047fb Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Tue, 15 Oct 2019 17:43:33 +0200 Subject: [PATCH] cleanup commit template, merge related to #66522 --- extensions/git/src/commands.ts | 2 +- extensions/git/src/git.ts | 3 +-- extensions/git/src/repository.ts | 20 +++++++++---------- src/vs/workbench/api/browser/mainThreadSCM.ts | 2 +- src/vs/workbench/api/common/extHostSCM.ts | 4 ++++ .../contrib/scm/browser/repositoryPanel.ts | 18 ++++++++++++----- src/vs/workbench/contrib/scm/common/scm.ts | 4 ++-- 7 files changed, 31 insertions(+), 22 deletions(-) diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index ece703f663a..895a4640e68 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -1392,7 +1392,7 @@ export class CommandCenter { const didCommit = await this.smartCommit(repository, getCommitMessage, opts); if (message && didCommit) { - repository.inputBox.value = await repository.getCommitTemplate(); + repository.inputBox.value = await repository.getInputTemplate(); } } diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index f348cceea4a..3dcf493277e 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -1760,8 +1760,7 @@ export class Repository { try { const raw = await readfile(mergeMsgPath, 'utf8'); return raw.trim(); - } - catch { + } catch { return undefined; } } diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index cc412389014..6f792d34cd7 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -750,8 +750,6 @@ export class Repository implements Disposable { const onDidChangeCountBadge = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git.countBadge', root)); onDidChangeCountBadge(this.setCountBadge, this, this.disposables); this.setCountBadge(); - - this.updateCommitTemplate(); } validateInput(text: string, position: number): SourceControlInputBoxValidation | undefined { @@ -827,12 +825,14 @@ export class Repository implements Disposable { return toGitUri(uri, '', { replaceFileExtension: true }); } - private async updateCommitTemplate(): Promise { - try { - this._sourceControl.commitTemplate = await this.repository.getCommitTemplate(); - } catch (e) { - // noop + async getInputTemplate(): Promise { + const mergeMessage = await this.repository.getMergeMessage(); + + if (mergeMessage) { + return mergeMessage; } + + return await this.repository.getCommitTemplate(); } getConfigs(): Promise<{ key: string; value: string; }[]> { @@ -1430,10 +1430,6 @@ export class Repository implements Disposable { const shouldIgnore = config.get('ignoreLimitWarning') === true; const useIcons = !config.get('decorations.enabled', true); this.isRepositoryHuge = didHitLimit; - const mergeMessage = await this.repository.getMergeMessage(); - if (mergeMessage) { - this.inputBox.value = mergeMessage; - } if (didHitLimit && !shouldIgnore && !this.didWarnAboutLimit) { const knownHugeFolderPaths = await this.findKnownHugeFolderPathsToIgnore(); @@ -1536,6 +1532,8 @@ export class Repository implements Disposable { this.setCountBadge(); this._onDidChangeStatus.fire(); + + this._sourceControl.commitTemplate = await this.getInputTemplate(); } private setCountBadge(): void { diff --git a/src/vs/workbench/api/browser/mainThreadSCM.ts b/src/vs/workbench/api/browser/mainThreadSCM.ts index 4488720cf9a..926cc4d8286 100644 --- a/src/vs/workbench/api/browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/browser/mainThreadSCM.ts @@ -114,7 +114,7 @@ class MainThreadSCMProvider implements ISCMProvider { get rootUri(): URI | undefined { return this._rootUri; } get contextValue(): string { return this._contextValue; } - get commitTemplate(): string | undefined { return this.features.commitTemplate; } + get commitTemplate(): string { return this.features.commitTemplate || ''; } get acceptInputCommand(): Command | undefined { return this.features.acceptInputCommand; } get statusBarCommands(): Command[] | undefined { return this.features.statusBarCommands; } get count(): number | undefined { return this.features.count; } diff --git a/src/vs/workbench/api/common/extHostSCM.ts b/src/vs/workbench/api/common/extHostSCM.ts index 6bc3d01ff2c..2cca3f54ca5 100644 --- a/src/vs/workbench/api/common/extHostSCM.ts +++ b/src/vs/workbench/api/common/extHostSCM.ts @@ -395,6 +395,10 @@ class ExtHostSourceControl implements vscode.SourceControl { } set commitTemplate(commitTemplate: string | undefined) { + if (commitTemplate === this._commitTemplate) { + return; + } + this._commitTemplate = commitTemplate; this._proxy.$updateSourceControl(this.handle, { commitTemplate }); } diff --git a/src/vs/workbench/contrib/scm/browser/repositoryPanel.ts b/src/vs/workbench/contrib/scm/browser/repositoryPanel.ts index 7ca8bac8f86..262b2780427 100644 --- a/src/vs/workbench/contrib/scm/browser/repositoryPanel.ts +++ b/src/vs/workbench/contrib/scm/browser/repositoryPanel.ts @@ -596,6 +596,7 @@ export class RepositoryPanel extends ViewletPanel { private menus: SCMMenus; private toggleViewModelModeAction: ToggleViewModeAction | undefined; protected contextKeyService: IContextKeyService; + private commitTemplate = ''; constructor( readonly repository: ISCMRepository, @@ -698,10 +699,10 @@ export class RepositoryPanel extends ViewletPanel { this._register(this.inputBox.onDidHeightChange(() => this.layoutBody())); if (this.repository.provider.onDidChangeCommitTemplate) { - this._register(this.repository.provider.onDidChangeCommitTemplate(this.updateInputBox, this)); + this._register(this.repository.provider.onDidChangeCommitTemplate(this.onDidChangeCommitTemplate, this)); } - this.updateInputBox(); + this.onDidChangeCommitTemplate(); // Input box visibility this._register(this.repository.input.onDidChangeVisibility(this.updateInputBoxVisibility, this)); @@ -922,12 +923,19 @@ export class RepositoryPanel extends ViewletPanel { .filter(r => !!r && !isSCMResourceGroup(r))! as any; } - private updateInputBox(): void { - if (typeof this.repository.provider.commitTemplate === 'undefined' || !this.repository.input.visible || this.inputBox.value) { + private onDidChangeCommitTemplate(): void { + if (typeof this.repository.provider.commitTemplate === 'undefined' || !this.repository.input.visible) { return; } - this.inputBox.value = this.repository.provider.commitTemplate; + const oldCommitTemplate = this.commitTemplate; + this.commitTemplate = this.repository.provider.commitTemplate; + + if (this.inputBox.value && this.inputBox.value !== oldCommitTemplate) { + return; + } + + this.inputBox.value = this.commitTemplate; } private updateInputBoxVisibility(): void { diff --git a/src/vs/workbench/contrib/scm/common/scm.ts b/src/vs/workbench/contrib/scm/common/scm.ts index 106a85c5f81..9b4a7f1d103 100644 --- a/src/vs/workbench/contrib/scm/common/scm.ts +++ b/src/vs/workbench/contrib/scm/common/scm.ts @@ -56,8 +56,8 @@ export interface ISCMProvider extends IDisposable { readonly rootUri?: URI; readonly count?: number; - readonly commitTemplate?: string; - readonly onDidChangeCommitTemplate?: Event; + readonly commitTemplate: string; + readonly onDidChangeCommitTemplate: Event; readonly onDidChangeStatusBarCommands?: Event; readonly acceptInputCommand?: Command; readonly statusBarCommands?: Command[];