Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgChangelog.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 |
---|---|
30 import java.util.Locale; | 30 import java.util.Locale; |
31 import java.util.Map; | 31 import java.util.Map; |
32 import java.util.TimeZone; | 32 import java.util.TimeZone; |
33 | 33 |
34 import org.tmatesoft.hg.core.HgBadArgumentException; | 34 import org.tmatesoft.hg.core.HgBadArgumentException; |
35 import org.tmatesoft.hg.core.HgException; | |
36 import org.tmatesoft.hg.core.HgInvalidControlFileException; | |
37 import org.tmatesoft.hg.core.HgInvalidRevisionException; | |
38 import org.tmatesoft.hg.core.Nodeid; | 35 import org.tmatesoft.hg.core.Nodeid; |
36 import org.tmatesoft.hg.internal.Callback; | |
39 import org.tmatesoft.hg.internal.DataAccess; | 37 import org.tmatesoft.hg.internal.DataAccess; |
40 import org.tmatesoft.hg.internal.IterateControlMediator; | 38 import org.tmatesoft.hg.internal.IterateControlMediator; |
41 import org.tmatesoft.hg.internal.Lifecycle; | 39 import org.tmatesoft.hg.internal.Lifecycle; |
42 import org.tmatesoft.hg.internal.Pool; | 40 import org.tmatesoft.hg.internal.Pool; |
43 import org.tmatesoft.hg.internal.RevlogStream; | 41 import org.tmatesoft.hg.internal.RevlogStream; |
105 public RawChangeset changeset(Nodeid nid) throws HgInvalidControlFileException, HgInvalidRevisionException { | 103 public RawChangeset changeset(Nodeid nid) throws HgInvalidControlFileException, HgInvalidRevisionException { |
106 int x = getRevisionIndex(nid); | 104 int x = getRevisionIndex(nid); |
107 return range(x, x).get(0); | 105 return range(x, x).get(0); |
108 } | 106 } |
109 | 107 |
108 @Callback | |
110 public interface Inspector { | 109 public interface Inspector { |
111 // TODO describe whether cset is new instance each time | 110 /** |
112 // describe what revisionNumber is when Inspector is used with HgBundle (BAD_REVISION or bundle's local order?) | 111 * Access next changeset |
113 void next(int revisionNumber, Nodeid nodeid, RawChangeset cset); | 112 * TODO describe what revisionNumber is when Inspector is used with HgBundle (BAD_REVISION or bundle's local order?) |
113 * | |
114 * @param revisionIndex index of revision being inspected, local to the inspected object | |
115 * @param nodeid revision being inspected | |
116 * @param cset changeset raw data | |
117 */ | |
118 void next(int revisionIndex, Nodeid nodeid, RawChangeset cset); | |
114 } | 119 } |
115 | 120 |
116 /** | 121 /** |
117 * Unlike regular {@link Inspector}, this one supplies changeset revision along with its parents and children according | 122 * Unlike regular {@link Inspector}, this one supplies changeset revision along with its parents and children according |
118 * to parent information of the revlog this inspector visits. | 123 * to parent information of the revlog this inspector visits. |
384 inspector = delegate; | 389 inspector = delegate; |
385 usersPool = new Pool<String>(); | 390 usersPool = new Pool<String>(); |
386 progressHelper = ProgressSupport.Factory.get(delegate); | 391 progressHelper = ProgressSupport.Factory.get(delegate); |
387 } | 392 } |
388 | 393 |
389 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) throws HgException { | 394 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { |
390 try { | 395 try { |
391 byte[] data = da.byteArray(); | 396 byte[] data = da.byteArray(); |
392 cset.init(data, 0, data.length, usersPool); | 397 cset.init(data, 0, data.length, usersPool); |
393 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse | 398 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse |
394 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 399 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); |
395 progressHelper.worked(1); | 400 progressHelper.worked(1); |
401 } catch (HgBadArgumentException ex) { | |
402 // see below about better exception | |
403 throw new HgInvalidControlFileException("Failed reading changelog", ex, null).setRevisionIndex(revisionNumber); | |
396 } catch (IOException ex) { | 404 } catch (IOException ex) { |
397 throw new HgException(ex); // XXX need better exception, perhaps smth like HgChangelogException (extends HgInvalidControlFileException) | 405 // XXX need better exception, perhaps smth like HgChangelogException (extends HgInvalidControlFileException) |
406 throw new HgInvalidControlFileException("Failed reading changelog", ex, null).setRevisionIndex(revisionNumber); | |
398 } | 407 } |
399 if (iterateControl != null) { | 408 if (iterateControl != null) { |
400 iterateControl.checkCancelled(); | 409 iterateControl.checkCancelled(); |
401 } | 410 } |
402 } | 411 } |