diff --git a/package.json b/package.json index cfcdd78d..902b5b4a 100644 --- a/package.json +++ b/package.json @@ -417,6 +417,15 @@ "command": "svn.deleteUnversioned", "title": "Delete selected files", "category": "SVN" + }, + { + "command": "svn.pickCommitMessage", + "title": "Pick a previous commit message", + "category": "SVN", + "icon": { + "light": "icons/light/icon-history.svg", + "dark": "icons/dark/icon-history.svg" + } } ], "menus": { @@ -576,6 +585,10 @@ { "command": "svn.itemlog.copymsg", "when": "false" + }, + { + "command": "svn.pickCommitMessage", + "when": "config.svn.enabled && svnOpenRepositoryCount != 0" } ], "view/title": [ @@ -671,6 +684,11 @@ "group": "navigation", "when": "config.svn.enabled && scmProvider == svn" }, + { + "command": "svn.pickCommitMessage", + "group": "navigation", + "when": "config.svn.enabled && scmProvider == svn" + }, { "command": "svn.switchBranch", "when": "config.svn.enabled && scmProvider == svn" diff --git a/src/commands.ts b/src/commands.ts index 90f091e8..3aac4d1f 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -23,6 +23,7 @@ import { OpenResourceHead } from "./commands/openResourceHead"; import { Patch } from "./commands/patch"; import { PatchAll } from "./commands/patchAll"; import { PatchChangeList } from "./commands/patchChangeList"; +import { PickCommitMessage } from "./commands/pickCommitMessage"; import { PromptAuth } from "./commands/promptAuth"; import { PromptRemove } from "./commands/promptRemove"; import { PullIncommingChange } from "./commands/pullIncomingChange"; @@ -84,4 +85,5 @@ export function registerCommands(model: Model, disposables: Disposable[]) { disposables.push(new OpenChangeHead()); disposables.push(new OpenHeadFile()); disposables.push(new RevertAll()); + disposables.push(new PickCommitMessage()); } diff --git a/src/commands/pickCommitMessage.ts b/src/commands/pickCommitMessage.ts new file mode 100644 index 00000000..c626b4e3 --- /dev/null +++ b/src/commands/pickCommitMessage.ts @@ -0,0 +1,38 @@ +import { QuickPickItem, window } from "vscode"; +import { Repository } from "../repository"; +import { Command } from "./command"; + +export class PickCommitMessage extends Command { + constructor() { + super("svn.pickCommitMessage", { repository: true }); + } + + public async execute(repository: Repository) { + const logs = await repository.log("HEAD", "0", 20); + + if (!logs.length) { + return; + } + + const picks: QuickPickItem[] = logs.map(l => { + return { + label: l.msg, + description: `r${l.revision} | ${l.author} | ${new Date( + l.date + ).toLocaleString()}` + }; + }); + + const selected = await window.showQuickPick(picks); + + if (selected === undefined) { + return; + } + + const msg = selected.label; + + repository.inputBox.value = msg; + + return msg; + } +}