Update tags on fetch if --tags or tag refspec specified
When either --tags or a tag ref is explicitly specified on fetch, C Git updates existing local tags if they are different. Before this change, JGit returned REJECTED in such a case. Now it updates it and returns FORCED. Example: % mkdir a % cd a % git init -q % touch test.txt % git add test.txt % git commit -q -m 'Initial' % git tag v1 % cd .. % git clone -q a b % cd a % echo Test > test.txt % git commit -q -a -m 'Second' % git tag -f v1 Updated tag 'v1' (was bc85c08) % cd ../b % git fetch --tags - [tag update] v1 -> v1 Bug: 388095 Change-Id: I5d5494c2ad1a2cdb8e9e614d3de445289734edfe
This commit is contained in:
parent
68b378a4b5
commit
f448d62d29
|
@ -52,8 +52,10 @@
|
|||
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||
import org.eclipse.jgit.api.errors.JGitInternalException;
|
||||
import org.eclipse.jgit.junit.RepositoryTestCase;
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.RefUpdate;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.lib.StoredConfig;
|
||||
import org.eclipse.jgit.revwalk.RevCommit;
|
||||
|
@ -168,4 +170,27 @@ public void fetchWithUpdatedTagShouldNotTryToUpdateLocal() throws Exception {
|
|||
|
||||
assertEquals(originalId, db.resolve(tagName));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fetchWithExplicitTagsShouldUpdateLocal() throws Exception {
|
||||
final String tagName = "foo";
|
||||
remoteGit.commit().setMessage("commit").call();
|
||||
Ref tagRef1 = remoteGit.tag().setName(tagName).call();
|
||||
|
||||
RefSpec spec = new RefSpec("refs/heads/*:refs/remotes/origin/*");
|
||||
git.fetch().setRemote("test").setRefSpecs(spec)
|
||||
.setTagOpt(TagOpt.AUTO_FOLLOW).call();
|
||||
assertEquals(tagRef1.getObjectId(), db.resolve(tagName));
|
||||
|
||||
remoteGit.commit().setMessage("commit 2").call();
|
||||
Ref tagRef2 = remoteGit.tag().setName(tagName).setForceUpdate(true)
|
||||
.call();
|
||||
|
||||
FetchResult result = git.fetch().setRemote("test").setRefSpecs(spec)
|
||||
.setTagOpt(TagOpt.FETCH_TAGS).call();
|
||||
TrackingRefUpdate update = result.getTrackingRefUpdate(Constants.R_TAGS
|
||||
+ tagName);
|
||||
assertEquals(RefUpdate.Result.FORCED, update.getResult());
|
||||
assertEquals(tagRef2.getObjectId(), db.resolve(tagName));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -412,7 +412,7 @@ private void expandFetchTags() throws TransportException {
|
|||
|
||||
private void wantTag(final Ref r) throws TransportException {
|
||||
want(r, new RefSpec().setSource(r.getName())
|
||||
.setDestination(r.getName()));
|
||||
.setDestination(r.getName()).setForceUpdate(true));
|
||||
}
|
||||
|
||||
private void want(final Ref src, final RefSpec spec)
|
||||
|
|
Loading…
Reference in New Issue