From f402575486e2ebafb0902ebed24bb47a1d558ba6 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Thu, 24 Oct 2019 15:27:57 +0200 Subject: [PATCH] cleanup git delete tag command --- extensions/git/package.json | 5 ---- extensions/git/package.nls.json | 1 - extensions/git/src/api/git.d.ts | 5 ---- extensions/git/src/commands.ts | 42 ++++++++++++-------------------- extensions/git/src/git.ts | 17 +------------ extensions/git/src/repository.ts | 7 +----- 6 files changed, 17 insertions(+), 60 deletions(-) diff --git a/extensions/git/package.json b/extensions/git/package.json index bdd37764cb2..c9c16a05887 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -272,11 +272,6 @@ "title": "%command.deleteTag%", "category": "Git" }, - { - "command": "git.getTags", - "title": "%command.getTags%", - "category": "Git" - }, { "command": "git.fetch", "title": "%command.fetch%", diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index b09c47bd841..58ffebc967e 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -38,7 +38,6 @@ "command.merge": "Merge Branch...", "command.createTag": "Create Tag", "command.deleteTag": "Delete Tag", - "command.getTags": "Get Tags", "command.fetch": "Fetch", "command.fetchPrune": "Fetch (Prune)", "command.fetchAll": "Fetch From All Remotes", diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts index e811301424e..a0b2d3dad7f 100644 --- a/extensions/git/src/api/git.d.ts +++ b/extensions/git/src/api/git.d.ts @@ -37,11 +37,6 @@ export interface Branch extends Ref { readonly behind?: number; } -export interface Tag extends Ref { - readonly name: string; - readonly message?: string; -} - export interface Commit { readonly hash: string; readonly message: string; diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index ff953c8a1aa..93932ab02ed 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -15,7 +15,7 @@ import { lstat, Stats } from 'fs'; import * as os from 'os'; import TelemetryReporter from 'vscode-extension-telemetry'; import * as nls from 'vscode-nls'; -import { Ref, RefType, Branch, GitErrorCodes, Status, Tag } from './api/git'; +import { Ref, RefType, Branch, GitErrorCodes, Status } from './api/git'; const localize = nls.loadMessageBundle(); @@ -38,25 +38,6 @@ class CheckoutItem implements QuickPickItem { } } -class TagItem implements QuickPickItem { - - get label(): string { return (this.tag.name || '').substr(0, 20); } - get name(): string { return (this.tag.name || ''); } - get description(): string { - return (this.tag.message || ''); - } - constructor(protected tag: Tag) { } - - async run(repository: Repository): Promise { - const name = this.tag.name || ''; - if (!name) { - return; - } - - await repository.deleteTag(name); - } -} - class CheckoutTagItem extends CheckoutItem { get description(): string { @@ -232,9 +213,10 @@ function createCheckoutItems(repository: Repository): CheckoutItem[] { return [...heads, ...tags, ...remoteHeads]; } -async function createTagItems(repository: Repository): Promise { - const tags = await repository.getTags(); - return tags.map(tag => new TagItem(tag)) || []; +class TagItem implements QuickPickItem { + get label(): string { return this.ref.name ?? ''; } + get description(): string { return this.ref.commit?.substr(0, 8) ?? ''; } + constructor(readonly ref: Ref) { } } enum PushType { @@ -1731,16 +1713,22 @@ export class CommandCenter { @command('git.deleteTag', { repository: true }) async deleteTag(repository: Repository): Promise { - const picks = await createTagItems(repository); - if (!picks) { + const picks = repository.refs.filter(ref => ref.type === RefType.Tag) + .map(ref => new TagItem(ref)); + + if (picks.length === 0) { window.showWarningMessage(localize('no tags', "This repository has no tags.")); + return; } + const placeHolder = localize('select a tag to delete', 'Select a tag to delete'); - const choice = await window.showQuickPick(picks, { placeHolder }); + const choice = await window.showQuickPick(picks, { placeHolder }); + if (!choice) { return; } - await repository.deleteTag(choice.name); + + await repository.deleteTag(choice.label); } @command('git.fetch', { repository: true }) diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts index dd2c86d78b0..24fe7964c14 100644 --- a/extensions/git/src/git.ts +++ b/extensions/git/src/git.ts @@ -15,7 +15,7 @@ import { assign, groupBy, denodeify, IDisposable, toDisposable, dispose, mkdirp, import { CancellationToken, Progress } from 'vscode'; import { URI } from 'vscode-uri'; import { detectEncoding } from './encoding'; -import { Ref, RefType, Branch, Remote, GitErrorCodes, LogOptions, Change, Status, Tag } from './api/git'; +import { Ref, RefType, Branch, Remote, GitErrorCodes, LogOptions, Change, Status } from './api/git'; import * as byline from 'byline'; import { StringDecoder } from 'string_decoder'; @@ -1332,21 +1332,6 @@ export class Repository { await this.run(args); } - async getTags(): Promise { - let args = ['tag', '-n1']; - const result = await this.run(args); - return result.stdout.trim().split('\n') - .map(line => line.trim().split('\0')) - .map(([line]) => { - const name = line.split(' ')[0]; - return { - name: name, - message: line.replace(name, '').trim() || '', - type: RefType.Tag - } as Tag; - }); - } - async clean(paths: string[]): Promise { const pathsByGroup = groupBy(paths, p => path.dirname(p)); const groups = Object.keys(pathsByGroup).map(k => pathsByGroup[k]); diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index 9b5825b4f65..f7ed10fd34d 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -13,7 +13,7 @@ import * as path from 'path'; import * as nls from 'vscode-nls'; import * as fs from 'fs'; import { StatusBarCommands } from './statusbar'; -import { Branch, Ref, Remote, RefType, GitErrorCodes, Status, LogOptions, Change, Tag } from './api/git'; +import { Branch, Ref, Remote, RefType, GitErrorCodes, Status, LogOptions, Change } from './api/git'; import { IFileWatcher, watch } from './watch'; const timeout = (millis: number) => new Promise(c => setTimeout(c, millis)); @@ -293,7 +293,6 @@ export const enum Operation { Ignore = 'Ignore', Tag = 'Tag', DeleteTag = 'DeleteTag', - GetTags = 'GetTags', Stash = 'Stash', CheckIgnore = 'CheckIgnore', GetObjectDetails = 'GetObjectDetails', @@ -1027,10 +1026,6 @@ export class Repository implements Disposable { await this.run(Operation.DeleteTag, () => this.repository.deleteTag(name)); } - async getTags(): Promise { - return await this.run(Operation.GetTags, () => this.repository.getTags()); - } - async checkout(treeish: string): Promise { await this.run(Operation.Checkout, () => this.repository.checkout(treeish, [])); } -- GitLab