Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/Revlog.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 | 7f136a3fa671 |
| children | 6437d261048a |
comparison
equal
deleted
inserted
replaced
| 422:5d1cc7366d04 | 423:9c9c442b5f2e |
|---|---|
| 27 import java.util.Collection; | 27 import java.util.Collection; |
| 28 import java.util.HashSet; | 28 import java.util.HashSet; |
| 29 import java.util.LinkedList; | 29 import java.util.LinkedList; |
| 30 import java.util.List; | 30 import java.util.List; |
| 31 | 31 |
| 32 import org.tmatesoft.hg.core.HgBadStateException; | |
| 33 import org.tmatesoft.hg.core.HgException; | 32 import org.tmatesoft.hg.core.HgException; |
| 34 import org.tmatesoft.hg.core.HgInvalidControlFileException; | |
| 35 import org.tmatesoft.hg.core.HgInvalidRevisionException; | |
| 36 import org.tmatesoft.hg.core.Nodeid; | 33 import org.tmatesoft.hg.core.Nodeid; |
| 37 import org.tmatesoft.hg.internal.ArrayHelper; | 34 import org.tmatesoft.hg.internal.ArrayHelper; |
| 38 import org.tmatesoft.hg.internal.DataAccess; | 35 import org.tmatesoft.hg.internal.DataAccess; |
| 39 import org.tmatesoft.hg.internal.Experimental; | 36 import org.tmatesoft.hg.internal.Experimental; |
| 40 import org.tmatesoft.hg.internal.Preview; | 37 import org.tmatesoft.hg.internal.Preview; |
| 170 if (BAD_REVISION == rn) { | 167 if (BAD_REVISION == rn) { |
| 171 return false; | 168 return false; |
| 172 } | 169 } |
| 173 if (rn < 0 || rn >= content.revisionCount()) { | 170 if (rn < 0 || rn >= content.revisionCount()) { |
| 174 // Sanity check | 171 // Sanity check |
| 175 throw new HgBadStateException(String.format("Revision index %d found for nodeid %s is not from the range [0..%d]", rn, nodeid.shortNotation(), content.revisionCount()-1)); | 172 throw new HgInvalidStateException(String.format("Revision index %d found for nodeid %s is not from the range [0..%d]", rn, nodeid.shortNotation(), content.revisionCount()-1)); |
| 176 } | 173 } |
| 177 return true; | 174 return true; |
| 178 } | 175 } |
| 179 | 176 |
| 180 /** | 177 /** |
| 397 } | 394 } |
| 398 } | 395 } |
| 399 | 396 |
| 400 private void assertSortedIndex(int x) { | 397 private void assertSortedIndex(int x) { |
| 401 if (x < 0) { | 398 if (x < 0) { |
| 402 throw new HgBadStateException(String.format("Bad index", x)); | 399 throw new HgInvalidStateException(String.format("Bad index", x)); |
| 403 } | 400 } |
| 404 } | 401 } |
| 405 | 402 |
| 406 /** | 403 /** |
| 407 * Tells whether supplied revision is from the walker's associated revlog. | 404 * Tells whether supplied revision is from the walker's associated revlog. |
| 615 protected void recordFailure(Exception ex) { | 612 protected void recordFailure(Exception ex) { |
| 616 assert failure == null; | 613 assert failure == null; |
| 617 failure = ex; | 614 failure = ex; |
| 618 } | 615 } |
| 619 | 616 |
| 617 // FIXME is HgException of any use here now? | |
| 620 // TODO consider if IOException in addition to HgException is of any real utility | 618 // TODO consider if IOException in addition to HgException is of any real utility |
| 621 public void checkFailed() throws HgException, IOException, CancelledException { | 619 public void checkFailed() throws HgException, IOException, CancelledException { |
| 622 if (failure == null) { | 620 if (failure == null) { |
| 623 return; | 621 return; |
| 624 } | 622 } |
| 629 throw (CancelledException) failure; | 627 throw (CancelledException) failure; |
| 630 } | 628 } |
| 631 if (failure instanceof HgException) { | 629 if (failure instanceof HgException) { |
| 632 throw (HgException) failure; | 630 throw (HgException) failure; |
| 633 } | 631 } |
| 634 throw new HgBadStateException(failure); | 632 throw new HgInvalidStateException(failure.toString()); |
| 635 } | 633 } |
| 636 | 634 |
| 637 public void checkCancelled() throws CancelledException { | 635 public void checkCancelled() throws CancelledException { |
| 638 if (cancelSupport != null) { | 636 if (cancelSupport != null) { |
| 639 cancelSupport.checkCancelled(); | 637 cancelSupport.checkCancelled(); |
| 695 int consumed = sink.write(buf); | 693 int consumed = sink.write(buf); |
| 696 if ((consumed == 0 || consumed != buf.position()) && logFacility != null) { | 694 if ((consumed == 0 || consumed != buf.position()) && logFacility != null) { |
| 697 logFacility.warn(getClass(), "Bad data sink when reading revision %d. Reported %d bytes consumed, byt actually read %d", revisionNumber, consumed, buf.position()); | 695 logFacility.warn(getClass(), "Bad data sink when reading revision %d. Reported %d bytes consumed, byt actually read %d", revisionNumber, consumed, buf.position()); |
| 698 } | 696 } |
| 699 if (buf.position() == 0) { | 697 if (buf.position() == 0) { |
| 700 throw new HgBadStateException("Bad sink implementation (consumes no bytes) results in endless loop"); | 698 throw new HgInvalidStateException("Bad sink implementation (consumes no bytes) results in endless loop"); |
| 701 } | 699 } |
| 702 buf.compact(); // ensure (a) there's space for new (b) data starts at 0 | 700 buf.compact(); // ensure (a) there's space for new (b) data starts at 0 |
| 703 progressSupport.worked(consumed); | 701 progressSupport.worked(consumed); |
| 704 } | 702 } |
| 705 progressSupport.done(); // XXX shall specify whether #done() is invoked always or only if completed successfully. | 703 progressSupport.done(); // XXX shall specify whether #done() is invoked always or only if completed successfully. |
