Add FetchCommand#setRefSpecs(String...) variant

Much of the time the caller can specify a RefSpec succinctly using a
string, and doesn't care about calling setters. Add a convenience method
for this case, and use it where applicable in JGit core.

Change-Id: Ic3fac7fc568eee4759236a5264d2e7e5f9b9716d
This commit is contained in:
Dave Borowitz 2017-09-07 07:46:25 -04:00
parent e68a9b3ed8
commit bb09e09344
3 changed files with 28 additions and 21 deletions

View File

@ -85,7 +85,6 @@
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.util.FileUtils;
@ -431,8 +430,8 @@ private Repository createRepositoryWithRemote() throws IOException,
config.save();
// fetch from first repository
RefSpec spec = new RefSpec("+refs/heads/*:refs/remotes/origin/*");
git2.fetch().setRemote("origin").setRefSpecs(spec).call();
git2.fetch().setRemote("origin")
.setRefSpecs("+refs/heads/*:refs/remotes/origin/*").call();
return db2;
}
}

View File

@ -56,7 +56,6 @@
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.transport.FetchResult;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.RemoteConfig;
import org.eclipse.jgit.transport.TagOpt;
import org.eclipse.jgit.transport.TrackingRefUpdate;
@ -93,9 +92,8 @@ public void testFetch() throws Exception {
RevCommit commit = remoteGit.commit().setMessage("initial commit").call();
Ref tagRef = remoteGit.tag().setName("tag").call();
RefSpec spec = new RefSpec("refs/heads/master:refs/heads/x");
git.fetch().setRemote("test").setRefSpecs(spec)
.call();
git.fetch().setRemote("test")
.setRefSpecs("refs/heads/master:refs/heads/x").call();
assertEquals(commit.getId(),
db.resolve(commit.getId().getName() + "^{commit}"));
@ -108,8 +106,8 @@ public void fetchShouldAutoFollowTag() throws Exception {
remoteGit.commit().setMessage("commit").call();
Ref tagRef = remoteGit.tag().setName("foo").call();
RefSpec spec = new RefSpec("refs/heads/*:refs/remotes/origin/*");
git.fetch().setRemote("test").setRefSpecs(spec)
git.fetch().setRemote("test")
.setRefSpecs("refs/heads/*:refs/remotes/origin/*")
.setTagOpt(TagOpt.AUTO_FOLLOW).call();
assertEquals(tagRef.getObjectId(), db.resolve("foo"));
@ -120,8 +118,8 @@ public void fetchShouldAutoFollowTagForFetchedObjects() throws Exception {
remoteGit.commit().setMessage("commit").call();
Ref tagRef = remoteGit.tag().setName("foo").call();
remoteGit.commit().setMessage("commit2").call();
RefSpec spec = new RefSpec("refs/heads/*:refs/remotes/origin/*");
git.fetch().setRemote("test").setRefSpecs(spec)
git.fetch().setRemote("test")
.setRefSpecs("refs/heads/*:refs/remotes/origin/*")
.setTagOpt(TagOpt.AUTO_FOLLOW).call();
assertEquals(tagRef.getObjectId(), db.resolve("foo"));
}
@ -132,9 +130,8 @@ public void fetchShouldNotFetchTagsFromOtherBranches() throws Exception {
remoteGit.checkout().setName("other").setCreateBranch(true).call();
remoteGit.commit().setMessage("commit2").call();
remoteGit.tag().setName("foo").call();
RefSpec spec = new RefSpec(
"refs/heads/master:refs/remotes/origin/master");
git.fetch().setRemote("test").setRefSpecs(spec)
git.fetch().setRemote("test")
.setRefSpecs("refs/heads/master:refs/remotes/origin/master")
.setTagOpt(TagOpt.AUTO_FOLLOW).call();
assertNull(db.resolve("foo"));
}
@ -146,7 +143,7 @@ public void fetchWithUpdatedTagShouldNotTryToUpdateLocal() throws Exception {
Ref tagRef = remoteGit.tag().setName(tagName).call();
ObjectId originalId = tagRef.getObjectId();
RefSpec spec = new RefSpec("refs/heads/*:refs/remotes/origin/*");
String spec = "refs/heads/*:refs/remotes/origin/*";
git.fetch().setRemote("test").setRefSpecs(spec)
.setTagOpt(TagOpt.AUTO_FOLLOW).call();
assertEquals(originalId, db.resolve(tagName));
@ -172,7 +169,7 @@ public void fetchWithExplicitTagsShouldUpdateLocal() throws Exception {
remoteGit.commit().setMessage("commit").call();
Ref tagRef1 = remoteGit.tag().setName(tagName).call();
RefSpec spec = new RefSpec("refs/heads/*:refs/remotes/origin/*");
String spec = "refs/heads/*:refs/remotes/origin/*";
git.fetch().setRemote("test").setRefSpecs(spec)
.setTagOpt(TagOpt.AUTO_FOLLOW).call();
assertEquals(tagRef1.getObjectId(), db.resolve(tagName));

View File

@ -42,10 +42,13 @@
*/
package org.eclipse.jgit.api;
import static java.util.stream.Collectors.toList;
import java.io.IOException;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jgit.annotations.Nullable;
@ -387,6 +390,18 @@ public List<RefSpec> getRefSpecs() {
return refSpecs;
}
/**
* The ref specs to be used in the fetch operation
*
* @param specs
* @return {@code this}
* @since 4.9
*/
public FetchCommand setRefSpecs(String... specs) {
return setRefSpecs(
Arrays.stream(specs).map(RefSpec::new).collect(toList()));
}
/**
* The ref specs to be used in the fetch operation
*
@ -394,11 +409,7 @@ public List<RefSpec> getRefSpecs() {
* @return {@code this}
*/
public FetchCommand setRefSpecs(RefSpec... specs) {
checkCallable();
this.refSpecs.clear();
for (RefSpec spec : specs)
refSpecs.add(spec);
return this;
return setRefSpecs(Arrays.asList(specs));
}
/**