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); |
