From 6b6f22707e2fea5e0cb00d6bff1d537c1fc20155 Mon Sep 17 00:00:00 2001 From: Thomas Townsend Date: Wed, 25 May 2016 15:56:54 +0200 Subject: [PATCH] Create workbench specific stage and unstage actions --- .../git/browser/gitActions.contribution.ts | 113 +++++++++++++++++- .../workbench/parts/git/browser/gitActions.ts | 4 +- 2 files changed, 112 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/parts/git/browser/gitActions.contribution.ts b/src/vs/workbench/parts/git/browser/gitActions.contribution.ts index 0e26043dfc3..c6b57d80da7 100644 --- a/src/vs/workbench/parts/git/browser/gitActions.contribution.ts +++ b/src/vs/workbench/parts/git/browser/gitActions.contribution.ts @@ -8,11 +8,12 @@ import nls = require('vs/nls'); import lifecycle = require('vs/base/common/lifecycle'); import platform = require('vs/platform/platform'); import abr = require('vs/workbench/browser/actionBarRegistry'); -import { TPromise } from 'vs/base/common/winjs.base'; +import { Promise, TPromise } from 'vs/base/common/winjs.base'; import editorbrowser = require('vs/editor/browser/editorBrowser'); import editorcommon = require('vs/editor/common/editorCommon'); import baseeditor = require('vs/workbench/browser/parts/editor/baseEditor'); import WorkbenchEditorCommon = require('vs/workbench/common/editor'); +import PlatformEditorCommon = require('vs/platform/editor/common/editor'); import tdeditor = require('vs/workbench/browser/parts/editor/textDiffEditor'); import teditor = require('vs/workbench/browser/parts/editor/textEditor'); import filesCommon = require('vs/workbench/parts/files/common/files'); @@ -244,6 +245,112 @@ class OpenInEditorAction extends baseeditor.EditorInputAction { } } +export class WorkbenchStageAction extends StageAction { + + private contextService: IWorkspaceContextService; + + constructor( + id = WorkbenchStageAction.ID, + label = WorkbenchStageAction.LABEL, + @IGitService gitService: IGitService, + @IWorkbenchEditorService editorService: IWorkbenchEditorService, + @IWorkspaceContextService contextService: IWorkspaceContextService + ) { + super(id, label, gitService, editorService); + this.contextService = contextService; + this.onGitServiceChange(); + } + + protected updateEnablement(): void { + if (this.contextService) { + this.enabled = this.isEnabled(); + } else { + this.enabled = super.isEnabled(); + } + } + + public isEnabled():boolean { + if (!super.isEnabled()) { + return false; + } + let editor = this.editorService.getActiveEditor(); + if (editor === null) { + return false; + } + if (editor instanceof baseeditor.BaseEditor) { + return true; + } + return false; + } + + public run(context?: any): Promise { + // use context if provided, else get file in view + if (context) { + return super.run(context); + } + let input = this.editorService.getActiveEditor().input; + if (gitei.isGitEditorInput(input)) { + return super.run([((input)).getFileStatus()]); + } + let fileStatus = getStatus(this.gitService, this.contextService, input); + return super.run([fileStatus]); + } +} + +export class WorkbenchUnstageAction extends UnstageAction { + + private contextService: IWorkspaceContextService; + + constructor( + id = WorkbenchUnstageAction.ID, + label = WorkbenchUnstageAction.LABEL, + @IGitService gitService: IGitService, + @IWorkbenchEditorService editorService: IWorkbenchEditorService, + @IWorkspaceContextService contextService: IWorkspaceContextService + ) { + super(id, label, gitService, editorService); + this.contextService = contextService; + this.onGitServiceChange(); + } + + protected updateEnablement(): void { + if (this.contextService) { + this.enabled = this.isEnabled(); + } else { + this.enabled = super.isEnabled(); + } + } + + public isEnabled():boolean { + if (!super.isEnabled()) { + return false; + } + let editor = this.editorService.getActiveEditor(); + if (editor === null) { + return false; + } + if (editor instanceof baseeditor.BaseEditor) { + return true; + } + return false; + } + + public run(context?: any): Promise { + // use context if provided, else get file in view + if (context) { + return super.run(context); + } + let fileStatus: IFileStatus; + let input = this.editorService.getActiveEditor().input; + if (gitei.isGitEditorInput(input)) { + fileStatus = ((input)).getFileStatus(); + } else { + fileStatus = getStatus(this.gitService, this.contextService, input); + } + return super.run([fileStatus]); + } +} + export class StageRangesAction extends baseeditor.EditorInputAction { private gitService: IGitService; private editorService: IWorkbenchEditorService; @@ -480,5 +587,5 @@ workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(StartGi workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(StartGitCheckoutAction, StartGitCheckoutAction.ID, StartGitCheckoutAction.LABEL), 'Git: Checkout', category); workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(InputCommitAction, InputCommitAction.ID, InputCommitAction.LABEL), 'Git: Commit', category); workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(UndoLastCommitAction, UndoLastCommitAction.ID, UndoLastCommitAction.LABEL), 'Git: Undo Last Commit', category); -workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(StageAction, StageAction.ID, StageAction.LABEL), 'Git: Stage', category); -workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(UnstageAction, UnstageAction.ID, UnstageAction.LABEL), 'Git: Unstage', category); +workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(WorkbenchStageAction, WorkbenchStageAction.ID, WorkbenchStageAction.LABEL), 'Git: Stage', category); +workbenchActionRegistry.registerWorkbenchAction(new SyncActionDescriptor(WorkbenchUnstageAction, WorkbenchUnstageAction.ID, WorkbenchUnstageAction.LABEL), 'Git: Unstage', category); diff --git a/src/vs/workbench/parts/git/browser/gitActions.ts b/src/vs/workbench/parts/git/browser/gitActions.ts index 98c973c334d..e018d93393d 100644 --- a/src/vs/workbench/parts/git/browser/gitActions.ts +++ b/src/vs/workbench/parts/git/browser/gitActions.ts @@ -212,7 +212,7 @@ export class RefreshAction extends GitAction { } export abstract class BaseStageAction extends GitAction { - private editorService: IWorkbenchEditorService; + protected editorService: IWorkbenchEditorService; constructor(id: string, label: string, className: string, gitService: IGitService, editorService: IWorkbenchEditorService) { super(id, label, className, gitService); @@ -490,7 +490,7 @@ export class GlobalUndoAction extends BaseUndoAction { export abstract class BaseUnstageAction extends GitAction { - private editorService: IWorkbenchEditorService; + protected editorService: IWorkbenchEditorService; constructor(id: string, label: string, className: string, gitService: IGitService, editorService: IWorkbenchEditorService) { super(id, label, className, gitService); -- GitLab