You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

70 lines
2.5 KiB

'use strict';
import { MessageItem, window } from 'vscode';
import { GlyphChars } from '../constants';
import { Container } from '../container';
import { GitStashCommit } from '../git/gitService';
import { Logger } from '../logger';
import { Messages } from '../messages';
import { CommandQuickPickItem } from '../quickpicks';
import { Command, CommandContext, Commands, isCommandViewContextWithCommit } from './common';
export interface StashDeleteCommandArgs {
confirm?: boolean;
stashItem?: { stashName: string; message: string; repoPath: string };
goBackCommand?: CommandQuickPickItem;
}
export class StashDeleteCommand extends Command {
constructor() {
super(Commands.StashDelete);
}
protected async preExecute(context: CommandContext, args: StashDeleteCommandArgs = { confirm: true }) {
if (isCommandViewContextWithCommit<GitStashCommit>(context)) {
args = { ...args };
args.stashItem = context.node.commit;
return this.execute(args);
}
return this.execute(args);
}
async execute(args: StashDeleteCommandArgs = { confirm: true }) {
args = { ...args };
if (
args.stashItem === undefined ||
args.stashItem.stashName === undefined ||
args.stashItem.repoPath === undefined
) {
return undefined;
}
if (args.confirm === undefined) {
args.confirm = true;
}
try {
if (args.confirm) {
const message =
args.stashItem.message.length > 80
? `${args.stashItem.message.substring(0, 80)}${GlyphChars.Ellipsis}`
: args.stashItem.message;
const result = await window.showWarningMessage(
`Delete stashed changes '${message}'?`,
{ title: 'Yes' } as MessageItem,
{ title: 'No', isCloseAffordance: true } as MessageItem
);
if (result === undefined || result.title !== 'Yes') {
return args.goBackCommand === undefined ? undefined : args.goBackCommand.execute();
}
}
return await Container.git.stashDelete(args.stashItem.repoPath, args.stashItem.stashName);
}
catch (ex) {
Logger.error(ex, 'StashDeleteCommand');
return Messages.showGenericErrorMessage('Unable to delete stash');
}
}
}