提交 a549c5c4 编写于 作者: J Joao Moreno

Merge branch 'Krzysztof-Cieslak-pushToRemote'

......@@ -28,7 +28,7 @@ import { IFileService } from 'vs/platform/files/common/files';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import wbar = require('vs/workbench/common/actionRegistry');
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
import { OpenChangeAction, OpenFileAction, SyncAction, PullAction, PushAction, PublishAction, StartGitBranchAction, StartGitCheckoutAction, InputCommitAction, UndoLastCommitAction, BaseStageAction, BaseUnstageAction } from './gitActions';
import { OpenChangeAction, OpenFileAction, SyncAction, PullAction, PushAction, PushToRemoteAction, PublishAction, StartGitBranchAction, StartGitCheckoutAction, InputCommitAction, UndoLastCommitAction, BaseStageAction, BaseUnstageAction } from './gitActions';
import paths = require('vs/base/common/paths');
import URI from 'vs/base/common/uri';
......@@ -634,6 +634,7 @@ workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(GlobalO
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(GlobalOpenInEditorAction, GlobalOpenInEditorAction.ID, GlobalOpenInEditorAction.LABEL), 'Git: Open File', category);
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(PullAction, PullAction.ID, PullAction.LABEL), 'Git: Pull', category);
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(PushAction, PushAction.ID, PushAction.LABEL), 'Git: Push', category);
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(PushToRemoteAction, PushToRemoteAction.ID, PushToRemoteAction.LABEL), 'Git: Push to...', category);
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(SyncAction, SyncAction.ID, SyncAction.LABEL), 'Git: Sync', category);
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(PublishAction, PublishAction.ID, PublishAction.LABEL), 'Git: Publish', category);
workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(StartGitBranchAction, StartGitBranchAction.ID, StartGitBranchAction.LABEL), 'Git: Branch', category);
......
......@@ -1007,6 +1007,64 @@ export class PushAction extends GitAction {
}
}
export class PushToRemoteAction extends GitAction {
static ID = 'workbench.action.git.pushToRemote';
static LABEL = nls.localize('pushToRemote', "Push to...");
constructor(
id: string = PushToRemoteAction.ID,
label: string = PushToRemoteAction.LABEL,
@IGitService gitService: IGitService,
@IQuickOpenService private quickOpenService: IQuickOpenService
) {
super(id, label, 'git-action publish', gitService);
}
protected isEnabled(): boolean {
if (!super.isEnabled()) {
return false;
}
if (!this.gitService.isIdle()) {
return false;
}
const model = this.gitService.getModel();
if (model.getRemotes().length === 0) {
return false;
}
const HEAD = model.getHEAD();
if (!HEAD || !HEAD.name) {
return false;
}
return true;
}
public run(context?: any): Promise {
const model = this.gitService.getModel();
const remotes = model.getRemotes();
const branchName = model.getHEAD().name;
const picks = remotes.map(({ name, url }) => ({ label: name, description: url }));
const placeHolder = nls.localize('pushToRemotePickMessage', "Pick a remote to push the branch '{0}' to:", branchName);
return this.quickOpenService.pick(picks, { placeHolder })
.then(pick => pick && pick.label)
.then(remote => remote && this.gitService.push(remote, branchName))
.then(null, err => {
if (err.gitErrorCode === GitErrorCodes.AuthenticationFailed) {
return Promise.wrapError(errors.create(nls.localize('authFailed', "Authentication failed on the git remote.")));
}
return Promise.wrapError(err);
});
}
}
export class PublishAction extends GitAction {
static ID = 'workbench.action.git.publish';
......
......@@ -285,6 +285,7 @@ export class ChangesView extends EventEmitter.EventEmitter implements GitView.IV
this.instantiationService.createInstance(GitActions.PullAction, GitActions.PullAction.ID, GitActions.PullAction.LABEL),
this.instantiationService.createInstance(GitActions.PullWithRebaseAction),
this.instantiationService.createInstance(GitActions.PushAction, GitActions.PushAction.ID, GitActions.PushAction.LABEL),
this.instantiationService.createInstance(GitActions.PushToRemoteAction, GitActions.PushToRemoteAction.ID, GitActions.PushToRemoteAction.LABEL),
new ActionBar.Separator(),
this.instantiationService.createInstance(GitActions.PublishAction, GitActions.PublishAction.ID, GitActions.PublishAction.LABEL),
new ActionBar.Separator(),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册