Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgChangelog.java @ 628:6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 22 May 2013 15:52:31 +0200 | 
| parents | 46f29b73e51e | 
| children | a937e63b6e02 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 627:5153eb73b18d | 628:6526d8adbc0f | 
|---|---|
| 51 | 51 | 
| 52 /* package-local */HgChangelog(HgRepository hgRepo, RevlogStream content) { | 52 /* package-local */HgChangelog(HgRepository hgRepo, RevlogStream content) { | 
| 53 super(hgRepo, content, true); | 53 super(hgRepo, content, true); | 
| 54 } | 54 } | 
| 55 | 55 | 
| 56 public void all(final HgChangelog.Inspector inspector) throws HgInvalidRevisionException, HgInvalidControlFileException { | 56 /** | 
| 57 * Iterate over whole changelog | |
| 58 * @param inspector callback to process entries | |
| 59 * @throws HgInvalidControlFileException if failed to access revlog index/data entry. <em>Runtime exception</em> | |
| 60 * @throws HgRuntimeException subclass thereof to indicate other issues with the library. <em>Runtime exception</em> | |
| 61 */ | |
| 62 public void all(final HgChangelog.Inspector inspector) throws HgRuntimeException { | |
| 57 range(0, getLastRevision(), inspector); | 63 range(0, getLastRevision(), inspector); | 
| 58 } | 64 } | 
| 59 | 65 | 
| 60 public void range(int start, int end, final HgChangelog.Inspector inspector) throws HgInvalidRevisionException, HgInvalidControlFileException { | 66 /** | 
| 67 * Iterate over changelog part | |
| 68 * @param start first changelog entry to process | |
| 69 * @param end last changelog entry to process | |
| 70 * @param inspector callback to process entries | |
| 71 * @throws HgInvalidRevisionException if any supplied revision doesn't identify revision from this revlog. <em>Runtime exception</em> | |
| 72 * @throws HgInvalidControlFileException if failed to access revlog index/data entry. <em>Runtime exception</em> | |
| 73 * @throws HgRuntimeException subclass thereof to indicate other issues with the library. <em>Runtime exception</em> | |
| 74 */ | |
| 75 public void range(int start, int end, final HgChangelog.Inspector inspector) throws HgRuntimeException { | |
| 61 if (inspector == null) { | 76 if (inspector == null) { | 
| 62 throw new IllegalArgumentException(); | 77 throw new IllegalArgumentException(); | 
| 63 } | 78 } | 
| 64 content.iterate(start, end, true, new RawCsetParser(inspector)); | 79 content.iterate(start, end, true, new RawCsetParser(inspector)); | 
| 65 } | 80 } | 
| 66 | 81 | 
| 67 public List<RawChangeset> range(int start, int end) throws HgInvalidRevisionException, HgInvalidControlFileException { | 82 /** | 
| 83 * @see #range(int, int, Inspector) | |
| 84 * @return changeset entry objects, never <code>null</code> | |
| 85 * @throws HgInvalidRevisionException if any supplied revision doesn't identify revision from this revlog. <em>Runtime exception</em> | |
| 86 * @throws HgInvalidControlFileException if failed to access revlog index/data entry. <em>Runtime exception</em> | |
| 87 * @throws HgRuntimeException subclass thereof to indicate other issues with the library. <em>Runtime exception</em> | |
| 88 */ | |
| 89 public List<RawChangeset> range(int start, int end) throws HgRuntimeException { | |
| 68 final RawCsetCollector c = new RawCsetCollector(end - start + 1); | 90 final RawCsetCollector c = new RawCsetCollector(end - start + 1); | 
| 69 range(start, end, c); | 91 range(start, end, c); | 
| 70 return c.result; | 92 return c.result; | 
| 71 } | 93 } | 
| 72 | 94 | 
| 73 /** | 95 /** | 
| 74 * Access individual revisions. Note, regardless of supplied revision order, inspector gets | 96 * Access individual revisions. Note, regardless of supplied revision order, inspector gets | 
| 75 * changesets strictly in the order they are in the changelog. | 97 * changesets strictly in the order they are in the changelog. | 
| 76 * @param inspector callback to get changesets | 98 * @param inspector callback to get changesets | 
| 77 * @param revisions revisions to read, unrestricted ordering. | 99 * @param revisions revisions to read, unrestricted ordering. | 
| 78 */ | 100 * @throws HgInvalidRevisionException if any supplied revision doesn't identify revision from this revlog <em>Runtime exception</em> | 
| 79 public void range(final HgChangelog.Inspector inspector, final int... revisions) throws HgInvalidRevisionException, HgInvalidControlFileException { | 101 * @throws HgInvalidControlFileException if failed to access revlog index/data entry. <em>Runtime exception</em> | 
| 102 * @throws HgRuntimeException subclass thereof to indicate other issues with the library. <em>Runtime exception</em> | |
| 103 */ | |
| 104 public void range(final HgChangelog.Inspector inspector, final int... revisions) throws HgRuntimeException { | |
| 80 Arrays.sort(revisions); | 105 Arrays.sort(revisions); | 
| 81 rangeInternal(inspector, revisions); | 106 rangeInternal(inspector, revisions); | 
| 82 } | 107 } | 
| 83 | 108 | 
| 84 /** | 109 /** | 
| 85 * Friends-only version of {@link #range(Inspector, int...)}, when callers know array is sorted | 110 * Friends-only version of {@link #range(Inspector, int...)}, when callers know array is sorted | 
| 86 */ | 111 */ | 
| 87 /*package-local*/ void rangeInternal(HgChangelog.Inspector inspector, int[] sortedRevisions) throws HgInvalidRevisionException, HgInvalidControlFileException { | 112 /*package-local*/ void rangeInternal(HgChangelog.Inspector inspector, int[] sortedRevisions) throws HgRuntimeException { | 
| 88 if (sortedRevisions == null || sortedRevisions.length == 0) { | 113 if (sortedRevisions == null || sortedRevisions.length == 0) { | 
| 89 return; | 114 return; | 
| 90 } | 115 } | 
| 91 if (inspector == null) { | 116 if (inspector == null) { | 
| 92 throw new IllegalArgumentException(); | 117 throw new IllegalArgumentException(); | 
| 93 } | 118 } | 
| 94 content.iterate(sortedRevisions, true, new RawCsetParser(inspector)); | 119 content.iterate(sortedRevisions, true, new RawCsetParser(inspector)); | 
| 95 } | 120 } | 
| 96 | 121 | 
| 97 /** | 122 /** | 
| 98 * @throws HgInvalidRevisionException if supplied nodeid doesn't identify any revision from this revlog | 123 * Get changeset entry object | 
| 99 * @throws HgInvalidControlFileException if access to revlog index/data entry failed | 124 * @throws HgInvalidRevisionException if supplied nodeid doesn't identify any revision from this revlog. <em>Runtime exception</em> | 
| 100 */ | 125 * @throws HgInvalidControlFileException if failed to access revlog index/data entry. <em>Runtime exception</em> | 
| 101 public RawChangeset changeset(Nodeid nid) throws HgInvalidControlFileException, HgInvalidRevisionException { | 126 * @throws HgRuntimeException subclass thereof to indicate other issues with the library. <em>Runtime exception</em> | 
| 127 */ | |
| 128 public RawChangeset changeset(Nodeid nid) throws HgRuntimeException { | |
| 102 int x = getRevisionIndex(nid); | 129 int x = getRevisionIndex(nid); | 
| 103 return range(x, x).get(0); | 130 return range(x, x).get(0); | 
| 104 } | 131 } | 
| 105 | 132 | 
| 106 @Callback | 133 @Callback | 
| 111 * | 138 * | 
| 112 * @param revisionIndex index of revision being inspected, local to the inspected object | 139 * @param revisionIndex index of revision being inspected, local to the inspected object | 
| 113 * @param nodeid revision being inspected | 140 * @param nodeid revision being inspected | 
| 114 * @param cset changeset raw data | 141 * @param cset changeset raw data | 
| 115 */ | 142 */ | 
| 116 void next(int revisionIndex, Nodeid nodeid, RawChangeset cset); | 143 void next(int revisionIndex, Nodeid nodeid, RawChangeset cset) throws HgRuntimeException; | 
| 117 } | 144 } | 
| 118 | 145 | 
| 119 /** | 146 /** | 
| 120 * Entry in the Changelog | 147 * Entry in the Changelog | 
| 121 */ | 148 */ | 
| 394 } else { | 421 } else { | 
| 395 lifecycleStub = null; | 422 lifecycleStub = null; | 
| 396 } | 423 } | 
| 397 } | 424 } | 
| 398 | 425 | 
| 399 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { | 426 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) throws HgRuntimeException { | 
| 400 try { | 427 try { | 
| 401 byte[] data = da.byteArray(); | 428 byte[] data = da.byteArray(); | 
| 402 cset.init(data, 0, data.length, usersPool); | 429 cset.init(data, 0, data.length, usersPool); | 
| 403 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse | 430 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse | 
| 404 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 431 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 
