aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java87
1 files changed, 47 insertions, 40 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 f158596143..4a0a8a6464 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/LsRemoteCommand.java
@@ -42,6 +42,7 @@
*/
package org.eclipse.jgit.api;
+import java.io.IOException;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import java.util.ArrayList;
@@ -50,10 +51,9 @@ import java.util.HashMap;
import java.util.Map;
import org.eclipse.jgit.JGitText;
+import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.JGitInternalException;
-import org.eclipse.jgit.errors.NotSupportedException;
-import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
@@ -128,56 +128,63 @@ public class LsRemoteCommand extends
this.uploadPack = uploadPack;
}
- public Collection<Ref> call() throws Exception {
+ /**
+ * Executes the {@code LsRemote} command with all the options and parameters
+ * collected by the setter methods (e.g. {@link #setHeads(boolean)}) of this
+ * class. Each instance of this class should only be used for one invocation
+ * of the command. Don't call this method twice on an instance.
+ *
+ * @return a collection of references in the remote repository
+ * @throws InvalidRemoteException
+ * when called with an invalid remote uri
+ * @throws JGitInternalException
+ * a low-level exception of JGit has occurred. The original
+ * exception can be retrieved by calling
+ * {@link Exception#getCause()}.
+ */
+ public Collection<Ref> call() throws GitAPIException,
+ JGitInternalException {
checkCallable();
+ Transport transport = null;
+ FetchConnection fc = null;
try {
- Transport transport = Transport.open(repo, remote);
+ transport = Transport.open(repo, remote);
transport.setOptionUploadPack(uploadPack);
configure(transport);
-
- try {
- Collection<RefSpec> refSpecs = new ArrayList<RefSpec>(1);
- if (tags)
- refSpecs.add(new RefSpec(
- "refs/tags/*:refs/remotes/origin/tags/*"));
- if (heads)
- refSpecs.add(new RefSpec(
- "refs/heads/*:refs/remotes/origin/*"));
- Collection<Ref> refs;
- Map<String, Ref> refmap = new HashMap<String, Ref>();
- FetchConnection fc = transport.openFetch();
- try {
- refs = fc.getRefs();
- if (refSpecs.isEmpty())
- for (Ref r : refs)
+ Collection<RefSpec> refSpecs = new ArrayList<RefSpec>(1);
+ if (tags)
+ refSpecs.add(new RefSpec(
+ "refs/tags/*:refs/remotes/origin/tags/*"));
+ if (heads)
+ refSpecs.add(new RefSpec("refs/heads/*:refs/remotes/origin/*"));
+ Collection<Ref> refs;
+ Map<String, Ref> refmap = new HashMap<String, Ref>();
+ fc = transport.openFetch();
+ refs = fc.getRefs();
+ if (refSpecs.isEmpty())
+ for (Ref r : refs)
+ refmap.put(r.getName(), r);
+ else
+ for (Ref r : refs)
+ for (RefSpec rs : refSpecs)
+ if (rs.matchSource(r)) {
refmap.put(r.getName(), r);
- else
- for (Ref r : refs)
- for (RefSpec rs : refSpecs)
- if (rs.matchSource(r)) {
- refmap.put(r.getName(), r);
- break;
- }
- } finally {
- fc.close();
- }
- return refmap.values();
-
- } catch (TransportException e) {
- throw new JGitInternalException(
- JGitText.get().exceptionCaughtDuringExecutionOfLsRemoteCommand,
- e);
- } finally {
- transport.close();
- }
+ break;
+ }
+ return refmap.values();
} catch (URISyntaxException e) {
throw new InvalidRemoteException(MessageFormat.format(
JGitText.get().invalidRemote, remote));
- } catch (NotSupportedException e) {
+ } catch (IOException e) {
throw new JGitInternalException(
JGitText.get().exceptionCaughtDuringExecutionOfLsRemoteCommand,
e);
+ } finally {
+ if (fc != null)
+ fc.close();
+ if (transport != null)
+ transport.close();
}
}