diff --git a/images/dark/icon-eye-selected.svg b/images/dark/icon-eye-selected.svg
index cb1a5ed..ffd75e0 100644
--- a/images/dark/icon-eye-selected.svg
+++ b/images/dark/icon-eye-selected.svg
@@ -1,4 +1,4 @@
+
+
\ No newline at end of file
diff --git a/images/dark/icon-eye.svg b/images/dark/icon-eye.svg
index 84c4d32..335f850 100644
--- a/images/dark/icon-eye.svg
+++ b/images/dark/icon-eye.svg
@@ -1,3 +1,3 @@
+
+
\ No newline at end of file
diff --git a/images/dark/icon-open.svg b/images/dark/icon-open.svg
new file mode 100644
index 0000000..fe7dd89
--- /dev/null
+++ b/images/dark/icon-open.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/images/light/icon-eye-selected.svg b/images/light/icon-eye-selected.svg
index f72b624..033d189 100644
--- a/images/light/icon-eye-selected.svg
+++ b/images/light/icon-eye-selected.svg
@@ -1,4 +1,4 @@
+
+
\ No newline at end of file
diff --git a/images/light/icon-eye.svg b/images/light/icon-eye.svg
index 1280078..a1e26ae 100644
--- a/images/light/icon-eye.svg
+++ b/images/light/icon-eye.svg
@@ -1,3 +1,3 @@
+
+
\ No newline at end of file
diff --git a/images/light/icon-open.svg b/images/light/icon-open.svg
new file mode 100644
index 0000000..a40a84a
--- /dev/null
+++ b/images/light/icon-open.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/package.json b/package.json
index 03f10a8..e55846b 100644
--- a/package.json
+++ b/package.json
@@ -2228,12 +2228,12 @@
},
{
"command": "gitlens.showCommitInView",
- "title": "Show Commit in View",
+ "title": "Open in Search Commits View",
"category": "GitLens"
},
{
"command": "gitlens.showFileHistoryInView",
- "title": "Show File History in View",
+ "title": "Open in File History View",
"category": "GitLens"
},
{
diff --git a/src/commands/git/search.ts b/src/commands/git/search.ts
index a0a7a72..3c78ff8 100644
--- a/src/commands/git/search.ts
+++ b/src/commands/git/search.ts
@@ -102,10 +102,18 @@ export class SearchGitCommand extends QuickCommandBase {
static readonly OpenInView: QuickInputButton = {
iconPath: {
- dark: Container.context.asAbsolutePath('images/dark/icon-link.svg') as any,
- light: Container.context.asAbsolutePath('images/light/icon-link.svg') as any
+ dark: Container.context.asAbsolutePath('images/dark/icon-open.svg') as any,
+ light: Container.context.asAbsolutePath('images/light/icon-open.svg') as any
},
- tooltip: 'Open in View'
+ tooltip: 'Open in Search Commits View'
+ };
+
+ static readonly RevealInView: QuickInputButton = {
+ iconPath: {
+ dark: Container.context.asAbsolutePath('images/dark/icon-eye.svg') as any,
+ light: Container.context.asAbsolutePath('images/light/icon-eye.svg') as any
+ },
+ tooltip: 'Reveal in Repositories View'
};
static readonly ShowInView: QuickInputButton = {
@@ -403,18 +411,30 @@ export class SearchGitCommand extends QuickCommandBase {
)
)
],
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView, this.Buttons.OpenInView],
onDidClickButton: (quickpick, button) => {
- if (button !== this.Buttons.OpenInView) return;
-
- void Container.searchView.search(
- state.repo!.path,
- search,
- {
- label: { label: `for ${state.pattern}` }
- },
- results
- );
+ if (button === this.Buttons.OpenInView) {
+ void Container.searchView.search(
+ state.repo!.path,
+ search,
+ {
+ label: { label: `for ${state.pattern}` }
+ },
+ results
+ );
+
+ return;
+ }
+
+ if (button === this.Buttons.RevealInView) {
+ if (quickpick.activeItems.length !== 0) {
+ void Container.repositoriesView.revealCommit(quickpick.activeItems[0].item, {
+ select: true,
+ focus: false,
+ expand: true
+ });
+ }
+ }
},
keys: ['right', 'alt+right', 'ctrl+right'],
onDidPressKey: async (quickpick, key) => {
@@ -461,17 +481,27 @@ export class SearchGitCommand extends QuickCommandBase {
items: await CommitQuickPick.getItems(pickedCommit, pickedCommit.toGitUri(), {
showChanges: false
}),
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView, this.Buttons.OpenInView],
onDidClickButton: (quickpick, button) => {
- if (button !== this.Buttons.OpenInView) return;
+ if (button === this.Buttons.OpenInView) {
+ void Container.searchView.search(
+ pickedCommit!.repoPath,
+ { pattern: SearchPattern.fromCommit(pickedCommit!) },
+ {
+ label: { label: `for commit id ${pickedCommit!.shortSha}` }
+ }
+ );
- void Container.searchView.search(
- pickedCommit!.repoPath,
- { pattern: SearchPattern.fromCommit(pickedCommit!) },
- {
- label: { label: `for commit id ${pickedCommit!.shortSha}` }
- }
- );
+ return;
+ }
+
+ if (button === this.Buttons.RevealInView) {
+ void Container.repositoriesView.revealCommit(pickedCommit!, {
+ select: true,
+ focus: false,
+ expand: true
+ });
+ }
}
});
const selection: StepSelection = yield step;
diff --git a/src/commands/git/stash.ts b/src/commands/git/stash.ts
index c42c29f..8b17fea 100644
--- a/src/commands/git/stash.ts
+++ b/src/commands/git/stash.ts
@@ -2,7 +2,7 @@
/* eslint-disable no-loop-func */
import { QuickInputButton, QuickInputButtons, QuickPickItem, Uri, window } from 'vscode';
import { Container } from '../../container';
-import { GitStashCommit, GitUri, Repository, SearchPattern } from '../../git/gitService';
+import { GitStashCommit, GitUri, Repository } from '../../git/gitService';
import {
BreakQuickCommand,
QuickCommandBase,
@@ -82,12 +82,12 @@ export interface StashGitCommandArgs {
export class StashGitCommand extends QuickCommandBase {
private readonly Buttons = class {
- static readonly OpenInView: QuickInputButton = {
+ static readonly RevealInView: QuickInputButton = {
iconPath: {
- dark: Container.context.asAbsolutePath('images/dark/icon-link.svg') as any,
- light: Container.context.asAbsolutePath('images/light/icon-link.svg') as any
+ dark: Container.context.asAbsolutePath('images/dark/icon-eye.svg') as any,
+ light: Container.context.asAbsolutePath('images/light/icon-eye.svg') as any
},
- tooltip: 'Open in View'
+ tooltip: 'Reveal in Repositories View'
};
};
@@ -345,9 +345,9 @@ export class StashGitCommand extends QuickCommandBase {
)
)
],
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView],
onDidClickButton: (quickpick, button) => {
- if (button === this.Buttons.OpenInView) {
+ if (button === this.Buttons.RevealInView) {
if (quickpick.activeItems.length !== 0) {
void Container.repositoriesView.revealStash(quickpick.activeItems[0].item, {
select: true,
@@ -415,9 +415,9 @@ export class StashGitCommand extends QuickCommandBase {
undefined,
{
placeholder: `Confirm ${this.title} ${getSubtitle(state.subcommand)}`,
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView],
onDidClickButton: (quickpick, button) => {
- if (button === this.Buttons.OpenInView) {
+ if (button === this.Buttons.RevealInView) {
void Container.repositoriesView.revealStash(state.stash!, {
select: true,
expand: true
@@ -472,9 +472,9 @@ export class StashGitCommand extends QuickCommandBase {
)
)
],
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView],
onDidClickButton: (quickpick, button) => {
- if (button === this.Buttons.OpenInView) {
+ if (button === this.Buttons.RevealInView) {
if (quickpick.activeItems.length !== 0) {
void Container.repositoriesView.revealStash(quickpick.activeItems[0].item, {
select: true,
@@ -519,9 +519,9 @@ export class StashGitCommand extends QuickCommandBase {
undefined,
{
placeholder: `Confirm ${this.title} ${getSubtitle(state.subcommand)}`,
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView],
onDidClickButton: (quickpick, button) => {
- if (button === this.Buttons.OpenInView) {
+ if (button === this.Buttons.RevealInView) {
void Container.repositoriesView.revealStash(state.stash!, {
select: true,
expand: true
@@ -569,9 +569,9 @@ export class StashGitCommand extends QuickCommandBase {
})
)
],
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView],
onDidClickButton: (quickpick, button) => {
- if (button === this.Buttons.OpenInView) {
+ if (button === this.Buttons.RevealInView) {
if (quickpick.activeItems.length !== 0) {
void Container.repositoriesView.revealStash(quickpick.activeItems[0].item, {
select: true,
@@ -616,17 +616,14 @@ export class StashGitCommand extends QuickCommandBase {
pickedStash.number === undefined ? '' : `${pickedStash.number}: `
}${pickedStash.getShortMessage()}`,
items: await CommitQuickPick.getItems(pickedStash, pickedStash.toGitUri(), { showChanges: false }),
- additionalButtons: [this.Buttons.OpenInView],
+ additionalButtons: [this.Buttons.RevealInView],
onDidClickButton: (quickpick, button) => {
- if (button !== this.Buttons.OpenInView) return;
+ if (button !== this.Buttons.RevealInView) return;
- void Container.searchView.search(
- pickedStash!.repoPath,
- { pattern: SearchPattern.fromCommit(pickedStash!) },
- {
- label: { label: `for commit id ${pickedStash!.shortSha}` }
- }
- );
+ void Container.repositoriesView.revealStash(pickedStash!, {
+ select: true,
+ expand: true
+ });
}
});
const selection: StepSelection = yield step;
diff --git a/src/commands/showQuickFileHistory.ts b/src/commands/showQuickFileHistory.ts
index e5eabf2..3eecdd5 100644
--- a/src/commands/showQuickFileHistory.ts
+++ b/src/commands/showQuickFileHistory.ts
@@ -8,7 +8,7 @@ import { Messages } from '../messages';
import {
CommandQuickPickItem,
FileHistoryQuickPick,
- OpenFileHistoryInViewQuickPickItem,
+ OpenInFileHistoryViewQuickPickItem,
ShowFileHistoryFromQuickPickItem
} from '../quickpicks';
import { Iterables, Strings } from '../system';
@@ -148,7 +148,7 @@ export class ShowQuickFileHistoryCommand extends ActiveEditorCachedCommand {
: undefined,
showInViewCommand:
args.log !== undefined
- ? new OpenFileHistoryInViewQuickPickItem(
+ ? new OpenInFileHistoryViewQuickPickItem(
gitUri,
(args.reference && args.reference.ref) || gitUri.sha
)
diff --git a/src/quickpicks/commitQuickPick.ts b/src/quickpicks/commitQuickPick.ts
index 2dbd770..7fa7db8 100644
--- a/src/quickpicks/commitQuickPick.ts
+++ b/src/quickpicks/commitQuickPick.ts
@@ -31,9 +31,9 @@ import {
CommandQuickPickItem,
getQuickPickIgnoreFocusOut,
KeyCommandQuickPickItem,
- OpenCommitInViewQuickPickItem,
+ OpenInSearchCommitsViewQuickPickItem,
QuickPickItem,
- RevealCommitInViewQuickPickItem
+ RevealInRepositoriesViewQuickPickItem
} from './commonQuickPicks';
import { OpenRemotesCommandQuickPickItem } from './remotesQuickPick';
@@ -284,11 +284,10 @@ export class CommitQuickPick {
)
);
- items.push(new OpenCommitInViewQuickPickItem(commit));
- items.push(new RevealCommitInViewQuickPickItem(commit));
+ items.push(new RevealInRepositoriesViewQuickPickItem(commit));
} else {
- items.push(new OpenCommitInViewQuickPickItem(commit));
- items.push(new RevealCommitInViewQuickPickItem(commit));
+ items.push(new OpenInSearchCommitsViewQuickPickItem(commit));
+ items.push(new RevealInRepositoriesViewQuickPickItem(commit));
items.push(new OpenCommitFilesCommandQuickPickItem(commit));
items.push(new OpenCommitFileRevisionsCommandQuickPickItem(commit));
diff --git a/src/quickpicks/commonQuickPicks.ts b/src/quickpicks/commonQuickPicks.ts
index 0d184e0..830e80c 100644
--- a/src/quickpicks/commonQuickPicks.ts
+++ b/src/quickpicks/commonQuickPicks.ts
@@ -98,11 +98,11 @@ export class MessageQuickPickItem extends CommandQuickPickItem {
}
}
-export class OpenCommitInViewQuickPickItem extends CommandQuickPickItem {
+export class OpenInSearchCommitsViewQuickPickItem extends CommandQuickPickItem {
constructor(
public readonly commit: GitLogCommit,
item: QuickPickItem = {
- label: '$(eye) Open in Search Commits View',
+ label: '$(link-external) Open in Search Commits View',
description: ''
}
) {
@@ -124,7 +124,7 @@ export class OpenCommitInViewQuickPickItem extends CommandQuickPickItem {
}
}
-export class OpenFileHistoryInViewQuickPickItem extends CommandQuickPickItem {
+export class OpenInFileHistoryViewQuickPickItem extends CommandQuickPickItem {
constructor(
public readonly uri: GitUri,
public readonly baseRef: string | undefined,
@@ -141,7 +141,7 @@ export class OpenFileHistoryInViewQuickPickItem extends CommandQuickPickItem {
}
}
-export class RevealCommitInViewQuickPickItem extends CommandQuickPickItem {
+export class RevealInRepositoriesViewQuickPickItem extends CommandQuickPickItem {
constructor(
public readonly commit: GitLogCommit | GitStashCommit,
item: QuickPickItem = {
diff --git a/src/views/repositoriesView.ts b/src/views/repositoriesView.ts
index d5df4c4..9910cf9 100644
--- a/src/views/repositoriesView.ts
+++ b/src/views/repositoriesView.ts
@@ -8,9 +8,16 @@ import {
ProgressLocation,
window
} from 'vscode';
-import { configuration, RepositoriesViewConfig, ViewFilesLayout, ViewsConfig } from '../configuration';
+import {
+ configuration,
+ RepositoriesViewConfig,
+ ViewFilesLayout,
+ ViewsConfig,
+ ViewShowBranchComparison
+} from '../configuration';
import { CommandContext, setCommandContext, WorkspaceState } from '../constants';
import { Container } from '../container';
+import { GitLogCommit, GitService, GitStashCommit } from '../git/gitService';
import {
BranchesNode,
BranchNode,
@@ -22,10 +29,8 @@ import {
StashNode,
ViewNode
} from './nodes';
+import { gate } from '../system';
import { ViewBase } from './viewBase';
-import { ViewShowBranchComparison } from '../config';
-import { GitLogCommit, GitStashCommit } from '../git/git';
-import { GitService } from '../git/gitService';
export class RepositoriesView extends ViewBase {
constructor() {
@@ -175,6 +180,7 @@ export class RepositoriesView extends ViewBase {
});
}
+ @gate(() => '')
revealCommit(
commit: GitLogCommit | { repoPath: string; ref: string },
options?: {
@@ -214,6 +220,7 @@ export class RepositoriesView extends ViewBase {
);
}
+ @gate(() => '')
async revealStash(
stash: GitStashCommit | { repoPath: string; ref: string; stashName: string },
options?: {
@@ -239,6 +246,7 @@ export class RepositoriesView extends ViewBase {
);
}
+ @gate(() => '')
async revealStashes(
repoPath: string,
options?: {
diff --git a/src/views/viewBase.ts b/src/views/viewBase.ts
index 85cfc82..865f4f1 100644
--- a/src/views/viewBase.ts
+++ b/src/views/viewBase.ts
@@ -175,7 +175,13 @@ export abstract class ViewBase> implements TreeData
@log({
args: {
0: (predicate: string | ((node: ViewNode) => boolean)) =>
- typeof predicate === 'string' ? predicate : false
+ typeof predicate === 'string' ? predicate : 'function',
+ 1: (opts: {
+ allowPaging?: boolean;
+ canTraverse?: (node: ViewNode) => boolean;
+ maxDepth?: number;
+ token?: CancellationToken;
+ }) => `options=${JSON.stringify({ ...opts, canTraverse: undefined, token: undefined })}`
}
})
async findNode(