diff options
author | Ned Twigg <ned.twigg@diffplug.com> | 2016-03-18 03:08:44 -0700 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2016-08-31 00:16:23 +0200 |
commit | b67df51203bb0b7a0dda8a8cfe1ddf09493a13f9 (patch) | |
tree | 92240fdb331628508bd582628f929fb8500009d9 | |
parent | 34673f0536ce30305940a1031fde8923952127e8 (diff) | |
download | jgit-b67df51203bb0b7a0dda8a8cfe1ddf09493a13f9.tar.gz jgit-b67df51203bb0b7a0dda8a8cfe1ddf09493a13f9.zip |
CLI: implement option -d for deleting tags
Change-Id: I438456b76aefd361384729686271288186d3be3b
Signed-off-by: Ned Twigg <ned.twigg@diffplug.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
4 files changed, 49 insertions, 11 deletions
diff --git a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java index 0fe25f550a..03391a0fb6 100644 --- a/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java +++ b/org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/TagTest.java @@ -46,6 +46,7 @@ import static org.junit.Assert.assertEquals; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.CLIRepositoryTestCase; +import org.eclipse.jgit.lib.Ref; import org.junit.Before; import org.junit.Test; @@ -70,4 +71,26 @@ public class TagTest extends CLIRepositoryTestCase { assertEquals("fatal: tag 'test' already exists", executeUnchecked("git tag test")[0]); } + + @Test + public void testTagDelete() throws Exception { + git.tag().setName("test").call(); + + Ref ref = git.getRepository().getTags().get("test"); + assertEquals("refs/tags/test", ref.getName()); + + assertEquals("", executeUnchecked("git tag -d test")[0]); + Ref deletedRef = git.getRepository().getTags().get("test"); + assertEquals(null, deletedRef); + } + + @Test + public void testTagDeleteFail() throws Exception { + try { + assertEquals("fatal: error: tag 'test' not found.", + executeUnchecked("git tag -d test")[0]); + } catch (Die e) { + assertEquals("fatal: error: tag 'test' not found", e.getMessage()); + } + } } diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties index 69905593ea..f3a42c385d 100644 --- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties +++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties @@ -200,6 +200,7 @@ switchedToNewBranch=Switched to a new branch ''{0}'' switchedToBranch=Switched to branch ''{0}'' tagAlreadyExists=tag ''{0}'' already exists tagLabel=tag +tagNotFound=error: tag ''{0}'' not found. taggerInfo=Tagger: {0} <{1}> timeInMilliSeconds={0} ms treeIsRequired=argument tree is required @@ -386,6 +387,7 @@ usage_srcPrefix=show the source prefix instead of "a/" usage_symbolicVersionForTheProject=Symbolic version for the project usage_tags=fetch all tags usage_notags=do not fetch tags +usage_tagDelete=delete tag usage_tagMessage=tag message usage_untrackedFilesMode=show untracked files usage_updateRef=reference to update diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java index 45fceb570f..dc4b037cf2 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Tag.java @@ -68,6 +68,9 @@ class Tag extends TextBuiltin { @Option(name = "-f", usage = "usage_forceReplacingAnExistingTag") private boolean force; + @Option(name = "-d", usage = "usage_tagDelete") + private boolean delete; + @Option(name = "-m", metaVar = "metaVar_message", usage = "usage_tagMessage") private String message = ""; //$NON-NLS-1$ @@ -81,19 +84,28 @@ class Tag extends TextBuiltin { protected void run() throws Exception { try (Git git = new Git(db)) { if (tagName != null) { - TagCommand command = git.tag().setForceUpdate(force) - .setMessage(message).setName(tagName); + if (delete) { + List<String> deletedTags = git.tagDelete().setTags(tagName) + .call(); + if (deletedTags.isEmpty()) { + throw die(MessageFormat + .format(CLIText.get().tagNotFound, tagName)); + } + } else { + TagCommand command = git.tag().setForceUpdate(force) + .setMessage(message).setName(tagName); - if (object != null) { - try (RevWalk walk = new RevWalk(db)) { - command.setObjectId(walk.parseAny(object)); + if (object != null) { + try (RevWalk walk = new RevWalk(db)) { + command.setObjectId(walk.parseAny(object)); + } + } + try { + command.call(); + } catch (RefAlreadyExistsException e) { + throw die(MessageFormat.format( + CLIText.get().tagAlreadyExists, tagName)); } - } - try { - command.call(); - } catch (RefAlreadyExistsException e) { - throw die(MessageFormat.format(CLIText.get().tagAlreadyExists, - tagName)); } } else { ListTagCommand command = git.tagList(); diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java index 4148cf65da..90c03e99b5 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java @@ -269,6 +269,7 @@ public class CLIText extends TranslationBundle { /***/ public String switchedToBranch; /***/ public String tagAlreadyExists; /***/ public String tagLabel; + /***/ public String tagNotFound; /***/ public String taggerInfo; /***/ public String timeInMilliSeconds; /***/ public String tooManyRefsGiven; |