tag option for clone command
Allow explicitly setting the tag option for the remote configuration when cloning a repository. Bug: 561021 Change-Id: Iac43268a2bb231ae7599c3255bf555883d34fa32 Signed-off-by: Alexander Nittka <alex@nittka.de>
This commit is contained in:
parent
04e16afb05
commit
769606d059
|
@ -44,6 +44,7 @@
|
||||||
import org.eclipse.jgit.submodule.SubmoduleWalk;
|
import org.eclipse.jgit.submodule.SubmoduleWalk;
|
||||||
import org.eclipse.jgit.transport.RefSpec;
|
import org.eclipse.jgit.transport.RefSpec;
|
||||||
import org.eclipse.jgit.transport.RemoteConfig;
|
import org.eclipse.jgit.transport.RemoteConfig;
|
||||||
|
import org.eclipse.jgit.transport.TagOpt;
|
||||||
import org.eclipse.jgit.transport.URIish;
|
import org.eclipse.jgit.transport.URIish;
|
||||||
import org.eclipse.jgit.util.SystemReader;
|
import org.eclipse.jgit.util.SystemReader;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -111,6 +112,7 @@ public void testCloneRepository() throws IOException,
|
||||||
.size());
|
.size());
|
||||||
assertEquals(new RefSpec("+refs/heads/*:refs/remotes/origin/*"),
|
assertEquals(new RefSpec("+refs/heads/*:refs/remotes/origin/*"),
|
||||||
fetchRefSpec(git2.getRepository()));
|
fetchRefSpec(git2.getRepository()));
|
||||||
|
assertTagOption(git2.getRepository(), TagOpt.AUTO_FOLLOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -801,6 +803,50 @@ public void testCloneWithPullRebase() throws Exception {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCloneNoTags() throws IOException, JGitInternalException,
|
||||||
|
GitAPIException, URISyntaxException {
|
||||||
|
File directory = createTempDirectory("testCloneRepository");
|
||||||
|
CloneCommand command = Git.cloneRepository();
|
||||||
|
command.setDirectory(directory);
|
||||||
|
command.setURI(fileUri());
|
||||||
|
command.setNoTags();
|
||||||
|
Git git2 = command.call();
|
||||||
|
addRepoToClose(git2.getRepository());
|
||||||
|
assertNotNull(git2);
|
||||||
|
assertNotNull(git2.getRepository().resolve("refs/heads/test"));
|
||||||
|
assertNull(git2.getRepository().resolve("tag-initial"));
|
||||||
|
assertNull(git2.getRepository().resolve("tag-for-blob"));
|
||||||
|
assertTagOption(git2.getRepository(), TagOpt.NO_TAGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCloneFollowTags() throws IOException, JGitInternalException,
|
||||||
|
GitAPIException, URISyntaxException {
|
||||||
|
File directory = createTempDirectory("testCloneRepository");
|
||||||
|
CloneCommand command = Git.cloneRepository();
|
||||||
|
command.setDirectory(directory);
|
||||||
|
command.setURI(fileUri());
|
||||||
|
command.setBranch("refs/heads/master");
|
||||||
|
command.setBranchesToClone(
|
||||||
|
Collections.singletonList("refs/heads/master"));
|
||||||
|
command.setTagOption(TagOpt.FETCH_TAGS);
|
||||||
|
Git git2 = command.call();
|
||||||
|
addRepoToClose(git2.getRepository());
|
||||||
|
assertNotNull(git2);
|
||||||
|
assertNull(git2.getRepository().resolve("refs/heads/test"));
|
||||||
|
assertNotNull(git2.getRepository().resolve("tag-initial"));
|
||||||
|
assertNotNull(git2.getRepository().resolve("tag-for-blob"));
|
||||||
|
assertTagOption(git2.getRepository(), TagOpt.FETCH_TAGS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertTagOption(Repository repo, TagOpt expectedTagOption)
|
||||||
|
throws URISyntaxException {
|
||||||
|
RemoteConfig remoteConfig = new RemoteConfig(
|
||||||
|
repo.getConfig(), "origin");
|
||||||
|
assertEquals(expectedTagOption, remoteConfig.getTagOpt());
|
||||||
|
}
|
||||||
|
|
||||||
private String fileUri() {
|
private String fileUri() {
|
||||||
return "file://" + git.getRepository().getWorkTree().getAbsolutePath();
|
return "file://" + git.getRepository().getWorkTree().getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,8 @@ public class CloneCommand extends TransportCommand<CloneCommand, Git> {
|
||||||
|
|
||||||
private FETCH_TYPE fetchType;
|
private FETCH_TYPE fetchType;
|
||||||
|
|
||||||
|
private TagOpt tagOption;
|
||||||
|
|
||||||
private enum FETCH_TYPE {
|
private enum FETCH_TYPE {
|
||||||
MULTIPLE_BRANCHES, ALL_BRANCHES, MIRROR
|
MULTIPLE_BRANCHES, ALL_BRANCHES, MIRROR
|
||||||
}
|
}
|
||||||
|
@ -278,6 +280,9 @@ private FetchResult fetch(Repository clonedRepo, URIish u)
|
||||||
|
|
||||||
config.setFetchRefSpecs(calculateRefSpecs(fetchType, config.getName()));
|
config.setFetchRefSpecs(calculateRefSpecs(fetchType, config.getName()));
|
||||||
config.setMirror(fetchType == FETCH_TYPE.MIRROR);
|
config.setMirror(fetchType == FETCH_TYPE.MIRROR);
|
||||||
|
if (tagOption != null) {
|
||||||
|
config.setTagOpt(tagOption);
|
||||||
|
}
|
||||||
config.update(clonedRepo.getConfig());
|
config.update(clonedRepo.getConfig());
|
||||||
|
|
||||||
clonedRepo.getConfig().save();
|
clonedRepo.getConfig().save();
|
||||||
|
@ -286,7 +291,12 @@ private FetchResult fetch(Repository clonedRepo, URIish u)
|
||||||
FetchCommand command = new FetchCommand(clonedRepo);
|
FetchCommand command = new FetchCommand(clonedRepo);
|
||||||
command.setRemote(remote);
|
command.setRemote(remote);
|
||||||
command.setProgressMonitor(monitor);
|
command.setProgressMonitor(monitor);
|
||||||
command.setTagOpt(fetchAll ? TagOpt.FETCH_TAGS : TagOpt.AUTO_FOLLOW);
|
if (tagOption != null) {
|
||||||
|
command.setTagOpt(tagOption);
|
||||||
|
} else {
|
||||||
|
command.setTagOpt(
|
||||||
|
fetchAll ? TagOpt.FETCH_TAGS : TagOpt.AUTO_FOLLOW);
|
||||||
|
}
|
||||||
configure(command);
|
configure(command);
|
||||||
|
|
||||||
return command.call();
|
return command.call();
|
||||||
|
@ -663,6 +673,30 @@ public CloneCommand setBranchesToClone(Collection<String> branchesToClone) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the tag option used for the remote configuration explicitly.
|
||||||
|
*
|
||||||
|
* @param tagOption
|
||||||
|
* tag option to be used for the remote config
|
||||||
|
* @return {@code this}
|
||||||
|
* @since 5.8
|
||||||
|
*/
|
||||||
|
public CloneCommand setTagOption(TagOpt tagOption) {
|
||||||
|
this.tagOption = tagOption;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the --no-tags option. Tags are not cloned now and the remote
|
||||||
|
* configuration is initialized with the --no-tags option as well.
|
||||||
|
*
|
||||||
|
* @return {@code this}
|
||||||
|
* @since 5.8
|
||||||
|
*/
|
||||||
|
public CloneCommand setNoTags() {
|
||||||
|
return setTagOption(TagOpt.NO_TAGS);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set whether to skip checking out a branch
|
* Set whether to skip checking out a branch
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue