mirror of
https://github.com/Microsoft/vscode
synced 2024-10-01 08:50:48 +00:00
Git - add dedicated commands to view changes (#209942)
This commit is contained in:
parent
5d77214b3f
commit
f9554073cc
|
@ -856,6 +856,27 @@
|
|||
"title": "%command.openRepositoriesInParentFolders%",
|
||||
"category": "Git"
|
||||
},
|
||||
{
|
||||
"command": "git.viewChanges",
|
||||
"title": "%command.viewChanges%",
|
||||
"icon": "$(diff-multiple)",
|
||||
"category": "Git",
|
||||
"enablement": "!operationInProgress"
|
||||
},
|
||||
{
|
||||
"command": "git.viewStagedChanges",
|
||||
"title": "%command.viewStagedChanges%",
|
||||
"icon": "$(diff-multiple)",
|
||||
"category": "Git",
|
||||
"enablement": "!operationInProgress"
|
||||
},
|
||||
{
|
||||
"command": "git.viewUntrackedChanges",
|
||||
"title": "%command.viewUntrackedChanges%",
|
||||
"icon": "$(diff-multiple)",
|
||||
"category": "Git",
|
||||
"enablement": "!operationInProgress"
|
||||
},
|
||||
{
|
||||
"command": "git.viewCommit",
|
||||
"title": "%command.viewCommit%",
|
||||
|
@ -1511,6 +1532,16 @@
|
|||
"when": "scmProvider == git && scmResourceGroup == index",
|
||||
"group": "inline@2"
|
||||
},
|
||||
{
|
||||
"command": "git.viewStagedChanges",
|
||||
"when": "scmProvider == git && scmResourceGroup == index && config.multiDiffEditor.experimental.enabled",
|
||||
"group": "inline@1"
|
||||
},
|
||||
{
|
||||
"command": "git.viewChanges",
|
||||
"when": "scmProvider == git && scmResourceGroup == workingTree && config.multiDiffEditor.experimental.enabled",
|
||||
"group": "inline@1"
|
||||
},
|
||||
{
|
||||
"command": "git.cleanAll",
|
||||
"when": "scmProvider == git && scmResourceGroup == workingTree && config.git.untrackedChanges == mixed",
|
||||
|
@ -1561,6 +1592,11 @@
|
|||
"when": "scmProvider == git && scmResourceGroup == untracked",
|
||||
"group": "1_modification"
|
||||
},
|
||||
{
|
||||
"command": "git.viewUntrackedChanges",
|
||||
"when": "scmProvider == git && scmResourceGroup == untracked && config.multiDiffEditor.experimental.enabled",
|
||||
"group": "inline@1"
|
||||
},
|
||||
{
|
||||
"command": "git.cleanAllUntracked",
|
||||
"when": "scmProvider == git && scmResourceGroup == untracked",
|
||||
|
|
|
@ -118,6 +118,9 @@
|
|||
"command.timelineCompareWithSelected": "Compare with Selected",
|
||||
"command.manageUnsafeRepositories": "Manage Unsafe Repositories",
|
||||
"command.openRepositoriesInParentFolders": "Open Repositories In Parent Folders",
|
||||
"command.viewChanges": "View Changes",
|
||||
"command.viewStagedChanges": "View Staged Changes",
|
||||
"command.viewUntrackedChanges": "View Untracked Changes",
|
||||
"command.viewAllChanges": "View All Changes",
|
||||
"command.viewCommit": "View Commit",
|
||||
"command.api.getRepositories": "Get Repositories",
|
||||
|
|
|
@ -11,7 +11,7 @@ import { uniqueNamesGenerator, adjectives, animals, colors, NumberDictionary } f
|
|||
import { ForcePushMode, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourcePublisher, Remote } from './api/git';
|
||||
import { Git, Stash } from './git';
|
||||
import { Model } from './model';
|
||||
import { Repository, Resource, ResourceGroupType } from './repository';
|
||||
import { GitResourceGroup, Repository, Resource, ResourceGroupType } from './repository';
|
||||
import { DiffEditorSelectionHunkToolbarContext, applyLineChanges, getModifiedRange, intersectDiffWithRange, invertLineChange, toLineRanges } from './staging';
|
||||
import { fromGitUri, toGitUri, isGitUri, toMergeUris, toMultiFileDiffEditorUris } from './uri';
|
||||
import { dispose, grep, isDefined, isDescendant, pathEquals, relativePath } from './util';
|
||||
|
@ -4143,6 +4143,33 @@ export class CommandCenter {
|
|||
}
|
||||
}
|
||||
|
||||
@command('git.viewChanges', { repository: true })
|
||||
async viewChanges(repository: Repository): Promise<void> {
|
||||
await this._viewResourceGroupChanges(repository, repository.workingTreeGroup);
|
||||
}
|
||||
|
||||
@command('git.viewStagedChanges', { repository: true })
|
||||
async viewStagedChanges(repository: Repository): Promise<void> {
|
||||
await this._viewResourceGroupChanges(repository, repository.indexGroup);
|
||||
}
|
||||
|
||||
@command('git.viewUntrackedChanges', { repository: true })
|
||||
async viewUnstagedChanges(repository: Repository): Promise<void> {
|
||||
await this._viewResourceGroupChanges(repository, repository.untrackedGroup);
|
||||
}
|
||||
|
||||
private async _viewResourceGroupChanges(repository: Repository, resourceGroup: GitResourceGroup): Promise<void> {
|
||||
if (resourceGroup.resourceStates.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
await commands.executeCommand('_workbench.openScmMultiDiffEditor', {
|
||||
title: `${repository.sourceControl.label}: ${resourceGroup.label}`,
|
||||
repositoryUri: Uri.file(repository.root),
|
||||
resourceGroupId: resourceGroup.id
|
||||
});
|
||||
}
|
||||
|
||||
@command('git.viewCommit', { repository: true })
|
||||
async viewCommit(repository: Repository, historyItem: SourceControlHistoryItem): Promise<void> {
|
||||
if (!repository || !historyItem) {
|
||||
|
|
|
@ -527,6 +527,11 @@ function registerOpenEditorAPICommands(): void {
|
|||
label: options.title,
|
||||
});
|
||||
});
|
||||
|
||||
CommandsRegistry.registerCommand('_workbench.openScmMultiDiffEditor', async (accessor: ServicesAccessor, options: OpenScmMultiFileDiffEditorOptions) => {
|
||||
const commandService = accessor.get(ICommandService);
|
||||
await commandService.executeCommand('multiDiffEditor.openScmDiff', options.title, URI.revive(options.repositoryUri), options.resourceGroupId);
|
||||
});
|
||||
}
|
||||
|
||||
interface OpenMultiFileDiffEditorOptions {
|
||||
|
@ -535,6 +540,12 @@ interface OpenMultiFileDiffEditorOptions {
|
|||
resources?: { originalUri: UriComponents; modifiedUri: UriComponents }[];
|
||||
}
|
||||
|
||||
interface OpenScmMultiFileDiffEditorOptions {
|
||||
title: string;
|
||||
repositoryUri: UriComponents;
|
||||
resourceGroupId: string;
|
||||
}
|
||||
|
||||
function registerOpenEditorAtIndexCommands(): void {
|
||||
const openEditorAtIndex: ICommandHandler = (accessor: ServicesAccessor, editorIndex: number): void => {
|
||||
const editorService = accessor.get(IEditorService);
|
||||
|
|
|
@ -3,15 +3,14 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { Codicon } from 'vs/base/common/codicons';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { observableFromEvent, waitForState } from 'vs/base/common/observable';
|
||||
import { ValueWithChangeEventFromObservable } from 'vs/base/common/observableInternal/utils';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IMultiDiffEditorOptions } from 'vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl';
|
||||
import { localize, localize2 } from 'vs/nls';
|
||||
import { Action2, MenuId } from 'vs/platform/actions/common/actions';
|
||||
import { ContextKeyExpr, ContextKeyValue } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { localize2 } from 'vs/nls';
|
||||
import { Action2 } from 'vs/platform/actions/common/actions';
|
||||
import { ContextKeyValue } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IMultiDiffSourceResolver, IMultiDiffSourceResolverService, IResolvedMultiDiffSource, MultiDiffEditorItem } from 'vs/workbench/contrib/multiDiffEditor/browser/multiDiffSourceResolverService';
|
||||
import { ISCMRepository, ISCMResourceGroup, ISCMService } from 'vs/workbench/contrib/scm/common/scm';
|
||||
|
@ -112,13 +111,12 @@ export class ScmMultiDiffSourceResolverContribution extends Disposable {
|
|||
}
|
||||
|
||||
export class OpenScmGroupAction extends Action2 {
|
||||
public static async openMultiFileDiffEditor(group: ISCMResourceGroup, editorService: IEditorService, options?: IMultiDiffEditorOptions) {
|
||||
if (!group.provider.rootUri) {
|
||||
public static async openMultiFileDiffEditor(editorService: IEditorService, label: string, repositoryRootUri: URI | undefined, resourceGroupId: string, options?: IMultiDiffEditorOptions) {
|
||||
if (!repositoryRootUri) {
|
||||
return;
|
||||
}
|
||||
|
||||
const multiDiffSource = ScmMultiDiffSourceResolver.getMultiDiffSourceUri(group.provider.rootUri.toString(), group.id);
|
||||
const label = localize('scmDiffLabel', '{0}: {1}', group.provider.label, group.label);
|
||||
const multiDiffSource = ScmMultiDiffSourceResolver.getMultiDiffSourceUri(repositoryRootUri.toString(), resourceGroupId);
|
||||
return await editorService.openEditor({ label, multiDiffSource, options });
|
||||
}
|
||||
|
||||
|
@ -126,21 +124,12 @@ export class OpenScmGroupAction extends Action2 {
|
|||
super({
|
||||
id: 'multiDiffEditor.openScmDiff',
|
||||
title: localize2('viewChanges', 'View Changes'),
|
||||
icon: Codicon.diffMultiple,
|
||||
menu: {
|
||||
when: ContextKeyExpr.and(
|
||||
ContextKeyExpr.has('config.multiDiffEditor.experimental.enabled'),
|
||||
ContextKeyExpr.has('multiDiffEditorEnableViewChanges'),
|
||||
),
|
||||
id: MenuId.SCMResourceGroupContext,
|
||||
group: 'inline',
|
||||
},
|
||||
f1: false,
|
||||
f1: false
|
||||
});
|
||||
}
|
||||
|
||||
async run(accessor: ServicesAccessor, group: ISCMResourceGroup): Promise<void> {
|
||||
async run(accessor: ServicesAccessor, title: string, repositoryRootUri: URI, resourceGroupId: string): Promise<void> {
|
||||
const editorService = accessor.get(IEditorService);
|
||||
await OpenScmGroupAction.openMultiFileDiffEditor(group, editorService);
|
||||
await OpenScmGroupAction.openMultiFileDiffEditor(editorService, title, repositoryRootUri, resourceGroupId);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3093,7 +3093,9 @@ export class SCMViewPane extends ViewPane {
|
|||
} else if (isSCMResource(e.element)) {
|
||||
if (e.element.command?.id === API_OPEN_EDITOR_COMMAND_ID || e.element.command?.id === API_OPEN_DIFF_EDITOR_COMMAND_ID) {
|
||||
if (isPointerEvent(e.browserEvent) && e.browserEvent.button === 1) {
|
||||
await OpenScmGroupAction.openMultiFileDiffEditor(e.element.resourceGroup, this.editorService, {
|
||||
const resourceGroup = e.element.resourceGroup;
|
||||
const title = `${resourceGroup.provider.label}: ${resourceGroup.label}`;
|
||||
await OpenScmGroupAction.openMultiFileDiffEditor(this.editorService, title, resourceGroup.provider.rootUri, resourceGroup.id, {
|
||||
...e.editorOptions,
|
||||
viewState: {
|
||||
revealData: {
|
||||
|
|
Loading…
Reference in a new issue