Change-Id: I438456b76aefd361384729686271288186d3be3b Signed-off-by: Ned Twigg <ned.twigg@diffplug.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>tags/v4.5.0.201609210915-r
@@ -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()); | |||
} | |||
} | |||
} |
@@ -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 |
@@ -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(); |
@@ -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; |