diff --git a/extensions/git/package.json b/extensions/git/package.json index 2a695b2626d..cf90adfa2b6 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -456,7 +456,7 @@ }, { "command": "git.syncRebase", - "when": "config.git.enabled && scmProvider == git && gitState == idle" + "when": "config.git.enabled && gitOpenRepositoryCount != 0" }, { "command": "git.publish", diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index fcf99aa4f98..0d7ac47e474 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -1240,8 +1240,7 @@ export class CommandCenter { repository.pushTo(pick.label, branchName); } - @command('git.sync', { repository: true }) - async sync(repository: Repository): Promise { + private async _sync(repository: Repository, rebase: boolean): Promise { const HEAD = repository.HEAD; if (!HEAD || !HEAD.upstream) { @@ -1264,7 +1263,16 @@ export class CommandCenter { } } - await repository.sync(); + if (rebase) { + await repository.syncRebase(); + } else { + await repository.sync(); + } + } + + @command('git.sync', { repository: true }) + sync(repository: Repository): Promise { + return this._sync(repository, false); } @command('git._syncAll') @@ -1281,29 +1289,8 @@ export class CommandCenter { } @command('git.syncRebase', { repository: true }) - async syncRebase(repository: Repository): Promise { - const HEAD = repository.HEAD; - if (!HEAD || !HEAD.upstream) { - return; - } - - const config = workspace.getConfiguration('git'); - const shouldPrompt = config.get('confirmSync') === true; - - if (shouldPrompt) { - const message = localize('sync is unpredictable', "This action will push and pull commits to and from '{0}'.", HEAD.upstream); - const yes = localize('ok', "OK"); - const neverAgain = localize('never again', "OK, Never Show Again"); - const pick = await window.showWarningMessage(message, { modal: true }, yes, neverAgain); - - if (pick === neverAgain) { - await config.update('confirmSync', false, true); - } else if (pick !== yes) { - return; - } - } - - await repository.syncRebase(); + syncRebase(repository: Repository): Promise { + return this._sync(repository, true); } @command('git.publish', { repository: true }) diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 2cd9d740ab4..58fd4a540fb 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -651,10 +651,9 @@ export class Repository implements Disposable { await this.run(Operation.Push, () => this.repository.push(remote, undefined, false, true)); } - @throttle - async sync(): Promise { + private async _sync(rebase: boolean): Promise { await this.run(Operation.Sync, async () => { - await this.repository.pull(); + await this.repository.pull(rebase); const shouldPush = this.HEAD && typeof this.HEAD.ahead === 'number' ? this.HEAD.ahead > 0 : true; @@ -664,17 +663,14 @@ export class Repository implements Disposable { }); } + @throttle + sync(): Promise { + return this._sync(false); + } + @throttle async syncRebase(): Promise { - await this.run(Operation.Sync, async () => { - await this.repository.pull(true); - - const shouldPush = this.HEAD && typeof this.HEAD.ahead === 'number' ? this.HEAD.ahead > 0 : true; - - if (shouldPush) { - await this.repository.push(); - } - }); + return this._sync(true); } async show(ref: string, filePath: string): Promise {