diff src/org/tmatesoft/hg/core/HgException.java @ 275:6d1804fe0ed7

Issue 10: Report file content length with respect of metadata. Respect dirstate parents for WC's status. Exceptions to keep useful attributes of the location
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 25 Aug 2011 21:35:03 +0200
parents 1a7a9a20e1f9
children 678e326fd27c
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/core/HgException.java	Thu Aug 25 03:57:39 2011 +0200
+++ b/src/org/tmatesoft/hg/core/HgException.java	Thu Aug 25 21:35:03 2011 +0200
@@ -16,6 +16,11 @@
  */
 package org.tmatesoft.hg.core;
 
+import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION;
+
+import org.tmatesoft.hg.repo.HgRepository;
+import org.tmatesoft.hg.util.Path;
+
 /**
  * Root class for all hg4j exceptions.
  * 
@@ -25,6 +30,10 @@
 @SuppressWarnings("serial")
 public class HgException extends Exception {
 
+	protected int revNumber = BAD_REVISION;
+	protected Nodeid revision;
+	protected Path filename;
+
 	public HgException(String reason) {
 		super(reason);
 	}
@@ -37,6 +46,59 @@
 		super(cause);
 	}
 
+	/**
+	 * @return not {@link HgRepository#BAD_REVISION} only when local revision number was supplied at the construction time
+	 */
+	public int getRevisionNumber() {
+		return revNumber;
+	}
+
+	public HgException setRevisionNumber(int rev) {
+		revNumber = rev;
+		return this;
+	}
+
+	/**
+	 * @return non-null only when revision was supplied at construction time
+	 */
+	public Nodeid getRevision() {
+		return revision;
+	}
+
+	public HgException setRevision(Nodeid r) {
+		revision = r;
+		return this;
+	}
+
+	/**
+	 * @return non-null only if file name was set at construction time
+	 */
+	public Path getFileName() {
+		return filename;
+	}
+
+	public HgException setFileName(Path name) {
+		filename = name;
+		return this;
+	}
+	
+	protected void appendDetails(StringBuilder sb) {
+		if (filename != null) {
+			sb.append(filename);
+			sb.append(':');
+			sb.append(' ');
+		}
+		if (revNumber != BAD_REVISION) {
+			sb.append(revNumber);
+			if (revision != null) {
+				sb.append(':');
+			}
+		}
+		if (revision != null) {
+			sb.append(revision.shortNotation());
+		}
+	}
+
 //	/* XXX CONSIDER capability to pass extra information about errors */
 //	public static class Status {
 //		public Status(String message, Throwable cause, int errorCode, Object extraData) {