Adds a callAsMap() function to LsRemoteCommand.
The call() function of LsRemoteCommand returns Collection<Ref>, while its internal is using Map<String, Ref> 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 <fishywang@google.com>
This commit is contained in:
parent
44f81d956b
commit
30cd891a48
|
@ -46,6 +46,7 @@
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -153,6 +154,28 @@ public LsRemoteCommand setUploadPack(String uploadPack) {
|
||||||
public Collection<Ref> call() throws GitAPIException,
|
public Collection<Ref> call() throws GitAPIException,
|
||||||
InvalidRemoteException,
|
InvalidRemoteException,
|
||||||
org.eclipse.jgit.api.errors.TransportException {
|
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<String, Ref> callAsMap() throws GitAPIException,
|
||||||
|
InvalidRemoteException,
|
||||||
|
org.eclipse.jgit.api.errors.TransportException {
|
||||||
|
return Collections.unmodifiableMap(execute());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Map<String, Ref> execute() throws GitAPIException,
|
||||||
|
InvalidRemoteException,
|
||||||
|
org.eclipse.jgit.api.errors.TransportException {
|
||||||
checkCallable();
|
checkCallable();
|
||||||
|
|
||||||
Transport transport = null;
|
Transport transport = null;
|
||||||
|
@ -184,7 +207,7 @@ public Collection<Ref> call() throws GitAPIException,
|
||||||
refmap.put(r.getName(), r);
|
refmap.put(r.getName(), r);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return refmap.values();
|
return refmap;
|
||||||
} catch (URISyntaxException e) {
|
} catch (URISyntaxException e) {
|
||||||
throw new InvalidRemoteException(MessageFormat.format(
|
throw new InvalidRemoteException(MessageFormat.format(
|
||||||
JGitText.get().invalidRemote, remote));
|
JGitText.get().invalidRemote, remote));
|
||||||
|
|
|
@ -160,16 +160,10 @@ public byte[] readFile(String uri, String ref, String path)
|
||||||
/** A default implementation of {@link RemoteReader} callback. */
|
/** A default implementation of {@link RemoteReader} callback. */
|
||||||
public static class DefaultRemoteReader implements RemoteReader {
|
public static class DefaultRemoteReader implements RemoteReader {
|
||||||
public ObjectId sha1(String uri, String ref) throws GitAPIException {
|
public ObjectId sha1(String uri, String ref) throws GitAPIException {
|
||||||
Collection<Ref> refs = Git
|
Map<String, Ref> map = Git
|
||||||
.lsRemoteRepository()
|
.lsRemoteRepository()
|
||||||
.setRemote(uri)
|
.setRemote(uri)
|
||||||
.call();
|
.callAsMap();
|
||||||
// Since LsRemoteCommand.call() only returned Map.values() to us, we
|
|
||||||
// have to rebuild the map here.
|
|
||||||
Map<String, Ref> map = new HashMap<String, Ref>(refs.size());
|
|
||||||
for (Ref r : refs)
|
|
||||||
map.put(r.getName(), r);
|
|
||||||
|
|
||||||
Ref r = RefDatabase.findRef(map, ref);
|
Ref r = RefDatabase.findRef(map, ref);
|
||||||
return r != null ? r.getObjectId() : null;
|
return r != null ? r.getObjectId() : null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue