diff --git a/src/vs/workbench/parts/git/browser/gitActions.ts b/src/vs/workbench/parts/git/browser/gitActions.ts index c094940960cd94adcf7513a1365ed535d29e0b60..f41b4b5495c6f786e3f92238675ed58d5308133b 100644 --- a/src/vs/workbench/parts/git/browser/gitActions.ts +++ b/src/vs/workbench/parts/git/browser/gitActions.ts @@ -29,6 +29,8 @@ import { IGitService, IFileStatus, Status, StatusType, ServiceState, IModel, IBr import { IQuickOpenService } from 'vs/workbench/services/quickopen/common/quickOpenService'; import paths = require('vs/base/common/paths'); import URI from 'vs/base/common/uri'; +import { IWindowService } from 'vs/workbench/services/window/electron-browser/windowService'; +import { IConfigurationEditingService, ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing'; function flatten(context?: any, preferFocus = false): IFileStatus[] { if (!context) { @@ -1090,7 +1092,9 @@ export class SyncAction extends GitAction { constructor(id: string, label: string, @IGitService gitService: IGitService, - @IConfigurationService private configurationService: IConfigurationService + @IConfigurationService private configurationService: IConfigurationService, + @IConfigurationEditingService private configurationEditingService: IConfigurationEditingService, + @IWindowService private windowService: IWindowService ) { super(id, label, 'git-action sync', gitService); } @@ -1119,12 +1123,39 @@ export class SyncAction extends GitAction { return TPromise.as(null); } - const config = this.configurationService.getConfiguration('git'); + const shouldPrompt = this.configurationService.getConfiguration('git').confirmSync; - if (config.confirmSync && !window.confirm(nls.localize('sureSync', "Are you sure you want to synchronize your git repository?"))) { - return TPromise.as(null); + if (!shouldPrompt) { + return this.sync(); + } + + const model = this.gitService.getModel(); + const HEAD = model.getHEAD(); + const window = this.windowService.getWindow(); + const choice = window.showMessageBox({ + title: SyncAction.LABEL, + message: nls.localize('sync is unpredictable', "This action will push and pull commits to and from '{0}'.", HEAD.upstream), + type: 'warning', + detail: nls.localize('do you want to continue', "Are you sure you want to continue?"), + buttons: [nls.localize('ok', "OK"), nls.localize('cancel', "Cancel"), nls.localize('never again', "OK, Never Show Again")], + noLink: true, + cancelId: 1 + }); + + switch (choice) { + case 0: + return this.sync(); + case 1: + return TPromise.as(null); + case 2: + return this.configurationEditingService.writeConfiguration(ConfigurationTarget.USER, { key: 'git.confirmSync', value: false }) + .then(() => this.sync()); + default: + return TPromise.as(null); } + } + private sync(): TPromise { return this.gitService.sync().then(null, (err) => { if (err.gitErrorCode === GitErrorCodes.AuthenticationFailed) { return Promise.wrapError(errors.create(nls.localize('authFailed', "Authentication failed on the git remote."))); diff --git a/src/vs/workbench/parts/git/browser/gitWorkbenchContributions.ts b/src/vs/workbench/parts/git/browser/gitWorkbenchContributions.ts index 700cbc0400953b5da6f02a6d9369536f9499bc84..efe7872b0abfa30dfac63f4b58729be4e6fca80d 100644 --- a/src/vs/workbench/parts/git/browser/gitWorkbenchContributions.ts +++ b/src/vs/workbench/parts/git/browser/gitWorkbenchContributions.ts @@ -556,7 +556,7 @@ export function registerContributions(): void { 'git.confirmSync': { type: 'boolean', description: nls.localize('confirmSync', "Confirm before synchronizing git repositories."), - default: false + default: true }, 'git.countBadge': { type: 'string',