diff src/org/tmatesoft/hg/repo/HgMergeState.java @ 423:9c9c442b5f2e

Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Fri, 23 Mar 2012 22:51:18 +0100
parents ee8264d80747
children 12f668401613
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgMergeState.java	Fri Mar 23 21:26:01 2012 +0100
+++ b/src/org/tmatesoft/hg/repo/HgMergeState.java	Fri Mar 23 22:51:18 2012 +0100
@@ -27,9 +27,7 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.tmatesoft.hg.core.HgBadStateException;
 import org.tmatesoft.hg.core.HgFileRevision;
-import org.tmatesoft.hg.core.HgInvalidControlFileException;
 import org.tmatesoft.hg.core.Nodeid;
 import org.tmatesoft.hg.internal.ManifestRevision;
 import org.tmatesoft.hg.internal.Pool;
@@ -39,7 +37,8 @@
 import org.tmatesoft.hg.util.PathRewrite;
 
 /**
- *
+ * Access to repository's merge state
+ * 
  * @author Artem Tikhomirov
  * @author TMate Software Ltd.
  */
@@ -92,7 +91,11 @@
 		repo = hgRepo;
 	}
 
-	public void refresh() throws HgInvalidControlFileException {
+	/**
+	 * Update our knowledge about repository's merge state
+	 * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em>
+	 */
+	public void refresh() throws HgRuntimeException {
 		entries = null;
 		// it's possible there are two parents but no merge/state, we shall report this case as 'merging', with proper
 		// first and second parent values
@@ -153,7 +156,7 @@
 				} else if ("r".equals(r[1])) {
 					k = Kind.Resolved;
 				} else {
-					throw new HgBadStateException(r[1]);
+					throw new HgInvalidStateException(String.format("Unknown merge kind %s", r[1]));
 				}
 				Entry e = new Entry(k, pathPool.path(r[0]), p1, p2, ca);
 				result.add(e);
@@ -184,7 +187,7 @@
 	 */
 	public boolean isStale() {
 		if (wcp1 == null) {
-			throw new HgBadStateException("Call #refresh() first");
+			refresh();
 		}
 		return !stateParent.isNull() /*there's merge state*/ && !wcp1.equals(stateParent) /*and it doesn't match*/; 
 	}
@@ -192,11 +195,12 @@
 	/**
 	 * It's possible for a repository to be in a 'merging' state (@see {@link #isMerging()} without any
 	 * conflict to resolve (no merge state information file).
+	 * 
 	 * @return first parent of the working copy, never <code>null</code>
 	 */
 	public Nodeid getFirstParent() {
 		if (wcp1 == null) {
-			throw new HgBadStateException("Call #refresh() first");
+			refresh();
 		}
 		return wcp1;
 	}
@@ -206,7 +210,7 @@
 	 */
 	public Nodeid getSecondParent() {
 		if (wcp2 == null) {
-			throw new HgBadStateException("Call #refresh() first");
+			refresh();
 		}
 		return wcp2;
 	}
@@ -216,7 +220,7 @@
 	 */
 	public Nodeid getStateParent() {
 		if (stateParent == null) {
-			throw new HgBadStateException("Call #refresh() first");
+			refresh();
 		}
 		return stateParent;
 	}