Skip to content

Commit b527966

Browse files
committed
feat: add progress indicator when removing worktrees
1 parent 09654b1 commit b527966

File tree

3 files changed

+38
-6
lines changed

3 files changed

+38
-6
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/commands/remove.ts

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import type { IWorktree } from '#/@types/worktree';
12
import { removeBranch, throwIfNotInWorktreeRepository } from '#/helpers/git';
3+
import { ProgressLocation, window } from 'vscode';
24
import settings from '../config/settings';
35
import { raiseIssue, showUserMessage } from '../helpers/vscode';
46
import { getWorktrees } from '../helpers/worktree/getWorktrees';
@@ -24,8 +26,38 @@ export const remove = async () => {
2426
if (!Array.isArray(selectedWorktrees))
2527
selectedWorktrees = [selectedWorktrees];
2628

27-
await Promise.all(
28-
selectedWorktrees.map((worktree) => removeWorktree(worktree))
29+
await window.withProgress(
30+
{
31+
location: ProgressLocation.Window,
32+
title: 'Removing Worktrees',
33+
cancellable: false,
34+
},
35+
async (progress) => {
36+
const worktrees = selectedWorktrees as IWorktree[];
37+
38+
let percentProgress = 0;
39+
let incrementBy = 100 / worktrees.length;
40+
41+
progress.report({ increment: percentProgress });
42+
43+
return Promise.all(
44+
worktrees.map(async (worktree) => {
45+
await removeWorktree(worktree);
46+
47+
percentProgress += incrementBy;
48+
49+
const currentlyRemoved = (
50+
worktrees.length -
51+
(100 - percentProgress) / incrementBy
52+
).toFixed();
53+
54+
progress.report({
55+
increment: percentProgress,
56+
message: `${currentlyRemoved}/${worktrees.length}`,
57+
});
58+
})
59+
);
60+
}
2961
);
3062

3163
if (settings.shouldRemoveBranch)

src/helpers/worktree/removeWorktree.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IWorktree } from '#/@types/worktree';
1+
import type { IWorktree } from '#/@types/worktree';
22
import { APP_NAME } from '#/src/config/constants';
33
import { executeCommand } from '../general';
44
import { showUserMessage } from '../vscode';
@@ -33,7 +33,7 @@ export const removeWorktree = async ({ worktree, path }: IWorktree) => {
3333
const forceCommand = `git worktree remove -f ${worktree}`;
3434
try {
3535
await executeCommand(forceCommand);
36-
await showUserMessage(
36+
showUserMessage(
3737
'Info',
3838
`Worktree named '${worktree}' was removed successfully`
3939
);

0 commit comments

Comments
 (0)