Skip to content

Commit 9c04fc1

Browse files
committed
Adds open folder to worktree error notification
1 parent 5ae5567 commit 9c04fc1

File tree

5 files changed

+43
-40
lines changed

5 files changed

+43
-40
lines changed

src/commands/git/worktree.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { MessageItem } from 'vscode';
2-
import { QuickInputButtons, Uri, window, workspace } from 'vscode';
2+
import { env, QuickInputButtons, Uri, window, workspace } from 'vscode';
33
import type { Config } from '../../config';
44
import type { Container } from '../../container';
55
import { PlusFeatures } from '../../features';
6-
import { convertOpenFlagsToLocation, reveal, revealInFileExplorer } from '../../git/actions/worktree';
6+
import { convertOpenFlagsToLocation, reveal } from '../../git/actions/worktree';
77
import {
88
WorktreeCreateError,
99
WorktreeCreateErrorReason,
@@ -23,7 +23,7 @@ import { createFlagsQuickPickItem } from '../../quickpicks/items/flags';
2323
import { configuration } from '../../system/configuration';
2424
import { basename, isDescendant } from '../../system/path';
2525
import { pluralize, truncateLeft } from '../../system/string';
26-
import { openWorkspace } from '../../system/utils';
26+
import { openWorkspace, revealInFileExplorer } from '../../system/utils';
2727
import type { ViewsWithRepositoryFolders } from '../../views/viewBase';
2828
import type {
2929
AsyncStepResultGenerator,
@@ -469,12 +469,21 @@ export class WorktreeGitCommand extends QuickCommand<State> {
469469
continue;
470470
}
471471
} else if (WorktreeCreateError.is(ex, WorktreeCreateErrorReason.AlreadyExists)) {
472-
void window.showErrorMessage(
473-
`Unable to create a new worktree in '${GitWorktree.getFriendlyPath(
474-
uri,
475-
)}' because the folder already exists and is not empty.`,
476-
'OK',
477-
);
472+
const confirm: MessageItem = { title: 'OK' };
473+
const openFolder: MessageItem = { title: 'Open Folder' };
474+
void window
475+
.showErrorMessage(
476+
`Unable to create a new worktree in '${GitWorktree.getFriendlyPath(
477+
uri,
478+
)}' because the folder already exists and is not empty.`,
479+
confirm,
480+
openFolder,
481+
)
482+
.then(result => {
483+
if (result === openFolder) {
484+
void env.openExternal(uri);
485+
}
486+
});
478487
} else {
479488
void showGenericErrorMessage(
480489
`Unable to create a new worktree in '${GitWorktree.getFriendlyPath(uri)}.`,
@@ -835,7 +844,7 @@ export class WorktreeGitCommand extends QuickCommand<State> {
835844
if (worktree == null) break;
836845

837846
if (state.flags.includes('--reveal-explorer')) {
838-
void revealInFileExplorer(worktree);
847+
void revealInFileExplorer(worktree.uri);
839848
} else {
840849
openWorkspace(worktree.uri, { location: convertOpenFlagsToLocation(state.flags) });
841850
}

src/git/actions/repository.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import type { ResetGitCommandArgs } from '../../commands/git/reset';
22
import { Container } from '../../container';
3-
import { executeCoreCommand } from '../../system/command';
43
import type { ViewsWithRepositoryFolders } from '../../views/viewBase';
54
import { executeGitCommand } from '../actions';
65
import type { GitBranchReference, GitReference, GitRevisionReference } from '../models/reference';
@@ -83,7 +82,3 @@ export async function reveal(
8382
}
8483
return node;
8584
}
86-
87-
export async function revealInFileExplorer(repo: Repository) {
88-
void (await executeCoreCommand('revealFileInOS', repo.uri));
89-
}

src/git/actions/worktree.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type { Uri } from 'vscode';
22
import type { WorktreeGitCommandArgs } from '../../commands/git/worktree';
33
import { Container } from '../../container';
44
import { ensure } from '../../system/array';
5-
import { executeCoreCommand } from '../../system/command';
65
import type { OpenWorkspaceLocation } from '../../system/utils';
76
import { executeGitCommand } from '../actions';
87
import type { GitReference } from '../models/reference';
@@ -65,10 +64,6 @@ export async function reveal(
6564
return node;
6665
}
6766

68-
export async function revealInFileExplorer(worktree: GitWorktree) {
69-
void (await executeCoreCommand('revealFileInOS', worktree.uri));
70-
}
71-
7267
type OpenFlagsArray = Extract<NonNullable<Required<WorktreeGitCommandArgs['state']>>, { subcommand: 'open' }>['flags'];
7368

7469
export function convertLocationToOpenFlags(location: OpenWorkspaceLocation | undefined): OpenFlagsArray | undefined {

src/system/utils.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,25 @@ export function findOrOpenEditors(uris: Uri[]): void {
5858
}
5959
}
6060

61+
export function getEditorCommand() {
62+
let editor;
63+
switch (env.appName) {
64+
case 'Visual Studio Code - Insiders':
65+
editor = 'code-insiders --wait --reuse-window';
66+
break;
67+
case 'Visual Studio Code - Exploration':
68+
editor = 'code-exploration --wait --reuse-window';
69+
break;
70+
case 'VSCodium':
71+
editor = 'codium --wait --reuse-window';
72+
break;
73+
default:
74+
editor = 'code --wait --reuse-window';
75+
break;
76+
}
77+
return editor;
78+
}
79+
6180
export function getEditorIfActive(document: TextDocument): TextEditor | undefined {
6281
const editor = window.activeTextEditor;
6382
return editor != null && editor.document === document ? editor : undefined;
@@ -180,23 +199,8 @@ export function openWorkspace(
180199
});
181200
}
182201

183-
export function getEditorCommand() {
184-
let editor;
185-
switch (env.appName) {
186-
case 'Visual Studio Code - Insiders':
187-
editor = 'code-insiders --wait --reuse-window';
188-
break;
189-
case 'Visual Studio Code - Exploration':
190-
editor = 'code-exploration --wait --reuse-window';
191-
break;
192-
case 'VSCodium':
193-
editor = 'codium --wait --reuse-window';
194-
break;
195-
default:
196-
editor = 'code --wait --reuse-window';
197-
break;
198-
}
199-
return editor;
202+
export async function revealInFileExplorer(uri: Uri) {
203+
void (await executeCoreCommand('revealFileInOS', uri));
200204
}
201205

202206
export function supportedInVSCodeVersion(feature: 'input-prompt-links') {

src/views/viewCommands.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import { setContext } from '../system/context';
3636
import { log } from '../system/decorators/log';
3737
import { sequentialize } from '../system/function';
3838
import type { OpenWorkspaceLocation } from '../system/utils';
39-
import { openWorkspace } from '../system/utils';
39+
import { openWorkspace, revealInFileExplorer } from '../system/utils';
4040
import { RepositoryFolderNode } from './nodes/abstract/repositoryFolderNode';
4141
import {
4242
canEditNode,
@@ -781,14 +781,14 @@ export class ViewCommands {
781781
private revealRepositoryInExplorer(node: RepositoryNode) {
782782
if (!(node instanceof RepositoryNode)) return undefined;
783783

784-
return RepoActions.revealInFileExplorer(node.repo);
784+
return revealInFileExplorer(node.repo.uri);
785785
}
786786

787787
@log()
788788
private revealWorktreeInExplorer(node: WorktreeNode) {
789789
if (!(node instanceof WorktreeNode)) return undefined;
790790

791-
return WorktreeActions.revealInFileExplorer(node.worktree);
791+
return revealInFileExplorer(node.worktree.uri);
792792
}
793793

794794
@log()

0 commit comments

Comments
 (0)