Narrow exceptions declared by LsRemoteCommand
API commands either throw GitAPIException or JGitInternalException. Also add missing javadoc and reduce nesting of catch blocks. Change-Id: I9a3b302e1b3f373ee11a977a0e3d6213bfbd3cdf Signed-off-by: Matthias Sohn <matthias.sohn@sap.com> Signed-off-by: Kevin Sawicki <kevin@github.com>
This commit is contained in:
parent
0806c803a9
commit
0f15d656f2
|
@ -42,6 +42,7 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.jgit.api;
|
package org.eclipse.jgit.api;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -50,10 +51,9 @@
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.jgit.JGitText;
|
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.InvalidRemoteException;
|
||||||
import org.eclipse.jgit.api.errors.JGitInternalException;
|
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.Constants;
|
||||||
import org.eclipse.jgit.lib.Ref;
|
import org.eclipse.jgit.lib.Ref;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
@ -128,26 +128,39 @@ public void setUploadPack(String uploadPack) {
|
||||||
this.uploadPack = uploadPack;
|
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();
|
checkCallable();
|
||||||
|
|
||||||
|
Transport transport = null;
|
||||||
|
FetchConnection fc = null;
|
||||||
try {
|
try {
|
||||||
Transport transport = Transport.open(repo, remote);
|
transport = Transport.open(repo, remote);
|
||||||
transport.setOptionUploadPack(uploadPack);
|
transport.setOptionUploadPack(uploadPack);
|
||||||
configure(transport);
|
configure(transport);
|
||||||
|
|
||||||
try {
|
|
||||||
Collection<RefSpec> refSpecs = new ArrayList<RefSpec>(1);
|
Collection<RefSpec> refSpecs = new ArrayList<RefSpec>(1);
|
||||||
if (tags)
|
if (tags)
|
||||||
refSpecs.add(new RefSpec(
|
refSpecs.add(new RefSpec(
|
||||||
"refs/tags/*:refs/remotes/origin/tags/*"));
|
"refs/tags/*:refs/remotes/origin/tags/*"));
|
||||||
if (heads)
|
if (heads)
|
||||||
refSpecs.add(new RefSpec(
|
refSpecs.add(new RefSpec("refs/heads/*:refs/remotes/origin/*"));
|
||||||
"refs/heads/*:refs/remotes/origin/*"));
|
|
||||||
Collection<Ref> refs;
|
Collection<Ref> refs;
|
||||||
Map<String, Ref> refmap = new HashMap<String, Ref>();
|
Map<String, Ref> refmap = new HashMap<String, Ref>();
|
||||||
FetchConnection fc = transport.openFetch();
|
fc = transport.openFetch();
|
||||||
try {
|
|
||||||
refs = fc.getRefs();
|
refs = fc.getRefs();
|
||||||
if (refSpecs.isEmpty())
|
if (refSpecs.isEmpty())
|
||||||
for (Ref r : refs)
|
for (Ref r : refs)
|
||||||
|
@ -159,25 +172,19 @@ public Collection<Ref> call() throws Exception {
|
||||||
refmap.put(r.getName(), r);
|
refmap.put(r.getName(), r);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
fc.close();
|
|
||||||
}
|
|
||||||
return refmap.values();
|
return refmap.values();
|
||||||
|
|
||||||
} catch (TransportException e) {
|
|
||||||
throw new JGitInternalException(
|
|
||||||
JGitText.get().exceptionCaughtDuringExecutionOfLsRemoteCommand,
|
|
||||||
e);
|
|
||||||
} finally {
|
|
||||||
transport.close();
|
|
||||||
}
|
|
||||||
} catch (URISyntaxException e) {
|
} catch (URISyntaxException e) {
|
||||||
throw new InvalidRemoteException(MessageFormat.format(
|
throw new InvalidRemoteException(MessageFormat.format(
|
||||||
JGitText.get().invalidRemote, remote));
|
JGitText.get().invalidRemote, remote));
|
||||||
} catch (NotSupportedException e) {
|
} catch (IOException e) {
|
||||||
throw new JGitInternalException(
|
throw new JGitInternalException(
|
||||||
JGitText.get().exceptionCaughtDuringExecutionOfLsRemoteCommand,
|
JGitText.get().exceptionCaughtDuringExecutionOfLsRemoteCommand,
|
||||||
e);
|
e);
|
||||||
|
} finally {
|
||||||
|
if (fc != null)
|
||||||
|
fc.close();
|
||||||
|
if (transport != null)
|
||||||
|
transport.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue