diff src/org/tmatesoft/hg/core/HgIncomingCommand.java @ 427:31a89587eb04

FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 29 Mar 2012 17:14:35 +0200
parents 9c9c442b5f2e
children 1fc0da631200
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/core/HgIncomingCommand.java	Wed Mar 28 19:34:37 2012 +0200
+++ b/src/org/tmatesoft/hg/core/HgIncomingCommand.java	Thu Mar 29 17:14:35 2012 +0200
@@ -29,12 +29,12 @@
 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain;
 import org.tmatesoft.hg.repo.HgBundle;
 import org.tmatesoft.hg.repo.HgChangelog;
+import org.tmatesoft.hg.repo.HgChangelog.RawChangeset;
 import org.tmatesoft.hg.repo.HgInvalidControlFileException;
-import org.tmatesoft.hg.repo.HgInvalidFileException;
-import org.tmatesoft.hg.repo.HgChangelog.RawChangeset;
 import org.tmatesoft.hg.repo.HgInvalidStateException;
 import org.tmatesoft.hg.repo.HgRemoteRepository;
 import org.tmatesoft.hg.repo.HgRepository;
+import org.tmatesoft.hg.repo.HgRuntimeException;
 import org.tmatesoft.hg.util.CancelledException;
 import org.tmatesoft.hg.util.ProgressSupport;
 
@@ -103,34 +103,36 @@
 	 *   
 	 * @return list of nodes present at remote and missing locally
 	 * @throws HgRemoteConnectionException when failed to communicate with remote repository
-	 * @throws HgInvalidControlFileException if access to revlog index/data entry failed
+	 * @throws HgException subclass thereof to indicate specific issue with the command arguments or repository state
 	 * @throws CancelledException if execution of the command was cancelled
 	 */
-	public List<Nodeid> executeLite() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException {
-		LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>();
-		RepositoryComparator repoCompare = getComparator();
-		for (BranchChain bc : getMissingBranches()) {
-			List<Nodeid> missing = repoCompare.visitBranches(bc);
-			HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant  
-			repoCompare.collectKnownRoots(bc, common);
-			// missing could only start with common elements. Once non-common, rest is just distinct branch revision trails.
-			for (Iterator<Nodeid> it = missing.iterator(); it.hasNext() && common.contains(it.next()); it.remove()) ; 
-			result.addAll(missing);
+	public List<Nodeid> executeLite() throws HgException, CancelledException {
+		try {
+			LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>();
+			RepositoryComparator repoCompare = getComparator();
+			for (BranchChain bc : getMissingBranches()) {
+				List<Nodeid> missing = repoCompare.visitBranches(bc);
+				HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant  
+				repoCompare.collectKnownRoots(bc, common);
+				// missing could only start with common elements. Once non-common, rest is just distinct branch revision trails.
+				for (Iterator<Nodeid> it = missing.iterator(); it.hasNext() && common.contains(it.next()); it.remove()) ; 
+				result.addAll(missing);
+			}
+			ArrayList<Nodeid> rv = new ArrayList<Nodeid>(result);
+			return rv;
+		} catch (HgRuntimeException ex) {
+			throw new HgLibraryFailureException(ex);
 		}
-		ArrayList<Nodeid> rv = new ArrayList<Nodeid>(result);
-		return rv;
 	}
 
 	/**
 	 * Full information about incoming changes
 	 * 
-	 * @throws HgRemoteConnectionException when failed to communicate with remote repository
-	 * @throws HgInvalidControlFileException if access to revlog index/data entry failed
-	 * @throws HgInvalidFileException to indicate failure working with locally downloaded changes in a bundle file
 	 * @throws HgCallbackTargetException to re-throw exception from the handler
+	 * @throws HgException subclass thereof to indicate specific issue with the command arguments or repository state
 	 * @throws CancelledException if execution of the command was cancelled
 	 */
-	public void executeFull(final HgChangesetHandler handler) throws HgRemoteConnectionException, HgInvalidControlFileException, HgInvalidFileException, HgCallbackTargetException, CancelledException {
+	public void executeFull(final HgChangesetHandler handler) throws HgCallbackTargetException, HgException, CancelledException {
 		if (handler == null) {
 			throw new IllegalArgumentException("Delegate can't be null");
 		}
@@ -161,6 +163,8 @@
 				}
 			});
 			transformer.checkFailure();
+		} catch (HgRuntimeException ex) {
+			throw new HgLibraryFailureException(ex);
 		} finally {
 			ps.done();
 		}