From 30cd891a48a74d29d04e6b81755ed197b4e2147f Mon Sep 17 00:00:00 2001 From: Yuxuan 'fishy' Wang Date: Thu, 22 May 2014 14:04:16 -0700 Subject: [PATCH] Adds a callAsMap() function to LsRemoteCommand. The call() function of LsRemoteCommand returns Collection, while its internal is using Map all the time. Sometimes the map is much more useful to the caller so add a callAsMap() function to keep the API compatibility. Change-Id: Icb96b71277d5e2de59872aa777352dedc048c4e3 Signed-off-by: Yuxuan 'fishy' Wang --- .../org/eclipse/jgit/api/LsRemoteCommand.java | 25 ++++++++++++++++++- .../org/eclipse/jgit/gitrepo/RepoCommand.java | 10 ++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java index 55ca58f9cb..e099a43502 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java @@ -46,6 +46,7 @@ import java.net.URISyntaxException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -153,6 +154,28 @@ public class LsRemoteCommand extends public Collection call() throws GitAPIException, InvalidRemoteException, org.eclipse.jgit.api.errors.TransportException { + return execute().values(); + } + + /** + * Same as {@link #call()}, but return Map instead of Collection. + * + * @return a map from names to references in the remote repository + * @throws InvalidRemoteException + * when called with an invalid remote uri + * @throws org.eclipse.jgit.api.errors.TransportException + * for errors that occurs during transport + * @since 3.5 + */ + public Map callAsMap() throws GitAPIException, + InvalidRemoteException, + org.eclipse.jgit.api.errors.TransportException { + return Collections.unmodifiableMap(execute()); + } + + protected Map execute() throws GitAPIException, + InvalidRemoteException, + org.eclipse.jgit.api.errors.TransportException { checkCallable(); Transport transport = null; @@ -184,7 +207,7 @@ public class LsRemoteCommand extends refmap.put(r.getName(), r); break; } - return refmap.values(); + return refmap; } catch (URISyntaxException e) { throw new InvalidRemoteException(MessageFormat.format( JGitText.get().invalidRemote, remote)); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java index e90abb5fbb..c6a6d8e66c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java @@ -160,16 +160,10 @@ public class RepoCommand extends GitCommand { /** A default implementation of {@link RemoteReader} callback. */ public static class DefaultRemoteReader implements RemoteReader { public ObjectId sha1(String uri, String ref) throws GitAPIException { - Collection refs = Git + Map map = Git .lsRemoteRepository() .setRemote(uri) - .call(); - // Since LsRemoteCommand.call() only returned Map.values() to us, we - // have to rebuild the map here. - Map map = new HashMap(refs.size()); - for (Ref r : refs) - map.put(r.getName(), r); - + .callAsMap(); Ref r = RefDatabase.findRef(map, ref); return r != null ? r.getObjectId() : null; } -- 2.39.5