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 55ca58f9c..e099a4350 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 e90abb5fb..c6a6d8e66 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; }