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:
Matthias Sohn 2012-01-08 13:08:08 -08:00 committed by Kevin Sawicki
parent 0806c803a9
commit 0f15d656f2
1 changed files with 47 additions and 40 deletions

View File

@ -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();
} }
} }