TagCommand: make -f work with lightweight tags for NO_CHANGE
JGit treated a NO_CHANGE RefUpdate as an error in all cases. But when updating a lightweight tag, this is a successful result if -f was specified. Change-Id: Iddfa6d6a6dc8bf8fed81138a008ebc32d5f960bd Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
This commit is contained in:
parent
dc8a927ce4
commit
29e1270768
|
@ -12,6 +12,7 @@
|
|||
import static org.eclipse.jgit.lib.Constants.R_TAGS;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
|
@ -21,6 +22,7 @@
|
|||
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||
import org.eclipse.jgit.api.errors.InvalidTagNameException;
|
||||
import org.eclipse.jgit.api.errors.JGitInternalException;
|
||||
import org.eclipse.jgit.api.errors.RefAlreadyExistsException;
|
||||
import org.eclipse.jgit.junit.RepositoryTestCase;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
|
@ -121,6 +123,27 @@ public void testUnannotatedTagging() throws GitAPIException,
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testForceNoChangeLightweight() throws GitAPIException {
|
||||
try (Git git = new Git(db)) {
|
||||
git.commit().setMessage("initial commit").call();
|
||||
RevCommit commit = git.commit().setMessage("second commit").call();
|
||||
git.commit().setMessage("third commit").call();
|
||||
Ref tagRef = git.tag().setObjectId(commit).setName("tag")
|
||||
.setAnnotated(false).call();
|
||||
assertEquals(commit.getId(), tagRef.getObjectId());
|
||||
// Without force, we want to get a RefAlreadyExistsException
|
||||
assertThrows(RefAlreadyExistsException.class,
|
||||
() -> git.tag().setObjectId(commit).setName("tag")
|
||||
.setAnnotated(false).call());
|
||||
// With force the call should work
|
||||
assertEquals(commit.getId(),
|
||||
git.tag().setObjectId(commit).setName("tag")
|
||||
.setAnnotated(false).setForceUpdate(true).call()
|
||||
.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmptyTagName() throws GitAPIException {
|
||||
try (Git git = new Git(db)) {
|
||||
|
|
|
@ -175,6 +175,12 @@ private Ref updateTagRef(ObjectId tagId, RevWalk revWalk,
|
|||
throw new ConcurrentRefUpdateException(
|
||||
JGitText.get().couldNotLockHEAD, tagRef.getRef(),
|
||||
updateResult);
|
||||
case NO_CHANGE:
|
||||
if (forceUpdate) {
|
||||
return repo.exactRef(refName);
|
||||
}
|
||||
throw new RefAlreadyExistsException(MessageFormat
|
||||
.format(JGitText.get().tagAlreadyExists, newTagToString));
|
||||
case REJECTED:
|
||||
throw new RefAlreadyExistsException(MessageFormat.format(
|
||||
JGitText.get().tagAlreadyExists, newTagToString));
|
||||
|
|
Loading…
Reference in New Issue