Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgChangelog.java @ 154:ba2bf656f00f
Changeset => RawChangeset
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 24 Feb 2011 22:16:19 +0100 |
| parents | ab7ea2ac21cb |
| children | d5268ca7715b |
comparison
equal
deleted
inserted
replaced
| 153:ab7ea2ac21cb | 154:ba2bf656f00f |
|---|---|
| 50 | 50 |
| 51 public void range(int start, int end, final HgChangelog.Inspector inspector) { | 51 public void range(int start, int end, final HgChangelog.Inspector inspector) { |
| 52 RevlogStream.Inspector i = new RevlogStream.Inspector() { | 52 RevlogStream.Inspector i = new RevlogStream.Inspector() { |
| 53 | 53 |
| 54 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { | 54 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { |
| 55 Changeset cset = Changeset.parse(data, 0, data.length); | 55 RawChangeset cset = RawChangeset.parse(data, 0, data.length); |
| 56 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse | 56 // XXX there's no guarantee for Changeset.Callback that distinct instance comes each time, consider instance reuse |
| 57 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 57 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); |
| 58 } | 58 } |
| 59 }; | 59 }; |
| 60 content.iterate(start, end, true, i); | 60 content.iterate(start, end, true, i); |
| 61 } | 61 } |
| 62 | 62 |
| 63 public List<Changeset> range(int start, int end) { | 63 public List<RawChangeset> range(int start, int end) { |
| 64 final ArrayList<Changeset> rv = new ArrayList<Changeset>(end - start + 1); | 64 final ArrayList<RawChangeset> rv = new ArrayList<RawChangeset>(end - start + 1); |
| 65 RevlogStream.Inspector i = new RevlogStream.Inspector() { | 65 RevlogStream.Inspector i = new RevlogStream.Inspector() { |
| 66 | 66 |
| 67 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { | 67 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { |
| 68 Changeset cset = Changeset.parse(data, 0, data.length); | 68 RawChangeset cset = RawChangeset.parse(data, 0, data.length); |
| 69 rv.add(cset); | 69 rv.add(cset); |
| 70 } | 70 } |
| 71 }; | 71 }; |
| 72 content.iterate(start, end, true, i); | 72 content.iterate(start, end, true, i); |
| 73 return rv; | 73 return rv; |
| 79 } | 79 } |
| 80 RevlogStream.Inspector i = new RevlogStream.Inspector() { | 80 RevlogStream.Inspector i = new RevlogStream.Inspector() { |
| 81 | 81 |
| 82 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { | 82 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { |
| 83 if (Arrays.binarySearch(revisions, revisionNumber) >= 0) { | 83 if (Arrays.binarySearch(revisions, revisionNumber) >= 0) { |
| 84 Changeset cset = Changeset.parse(data, 0, data.length); | 84 RawChangeset cset = RawChangeset.parse(data, 0, data.length); |
| 85 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); | 85 inspector.next(revisionNumber, Nodeid.fromBinary(nodeid, 0), cset); |
| 86 } | 86 } |
| 87 } | 87 } |
| 88 }; | 88 }; |
| 89 Arrays.sort(revisions); | 89 Arrays.sort(revisions); |
| 90 content.iterate(revisions[0], revisions[revisions.length - 1], true, i); | 90 content.iterate(revisions[0], revisions[revisions.length - 1], true, i); |
| 91 } | 91 } |
| 92 | 92 |
| 93 public interface Inspector { | 93 public interface Inspector { |
| 94 // TODO describe whether cset is new instance each time | 94 // TODO describe whether cset is new instance each time |
| 95 void next(int revisionNumber, Nodeid nodeid, Changeset cset); | 95 void next(int revisionNumber, Nodeid nodeid, RawChangeset cset); |
| 96 } | 96 } |
| 97 | 97 |
| 98 /** | 98 /** |
| 99 * Entry in the Changelog | 99 * Entry in the Changelog |
| 100 */ | 100 */ |
| 101 public static class Changeset implements Cloneable /* for those that would like to keep a copy */{ | 101 public static class RawChangeset implements Cloneable /* for those that would like to keep a copy */{ |
| 102 // TODO immutable | 102 // TODO immutable |
| 103 private/* final */Nodeid manifest; | 103 private/* final */Nodeid manifest; |
| 104 private String user; | 104 private String user; |
| 105 private String comment; | 105 private String comment; |
| 106 private List<String> files; // unmodifiable collection (otherwise #files() and implicit #clone() shall be revised) | 106 private List<String> files; // unmodifiable collection (otherwise #files() and implicit #clone() shall be revised) |
| 122 * (.*) : comment (free text, ideally utf-8) | 122 * (.*) : comment (free text, ideally utf-8) |
| 123 * | 123 * |
| 124 * changelog v0 doesn't use extra | 124 * changelog v0 doesn't use extra |
| 125 * </pre> | 125 * </pre> |
| 126 */ | 126 */ |
| 127 private Changeset() { | 127 private RawChangeset() { |
| 128 } | 128 } |
| 129 | 129 |
| 130 public Nodeid manifest() { | 130 public Nodeid manifest() { |
| 131 return manifest; | 131 return manifest; |
| 132 } | 132 } |
| 188 sb.append("}"); | 188 sb.append("}"); |
| 189 return sb.toString(); | 189 return sb.toString(); |
| 190 } | 190 } |
| 191 | 191 |
| 192 @Override | 192 @Override |
| 193 public Changeset clone() { | 193 public RawChangeset clone() { |
| 194 try { | 194 try { |
| 195 return (Changeset) super.clone(); | 195 return (RawChangeset) super.clone(); |
| 196 } catch (CloneNotSupportedException ex) { | 196 } catch (CloneNotSupportedException ex) { |
| 197 throw new InternalError(ex.toString()); | 197 throw new InternalError(ex.toString()); |
| 198 } | 198 } |
| 199 } | 199 } |
| 200 | 200 |
| 201 public static Changeset parse(byte[] data, int offset, int length) { | 201 public static RawChangeset parse(byte[] data, int offset, int length) { |
| 202 Changeset rv = new Changeset(); | 202 RawChangeset rv = new RawChangeset(); |
| 203 rv.init(data, offset, length); | 203 rv.init(data, offset, length); |
| 204 return rv; | 204 return rv; |
| 205 } | 205 } |
| 206 | 206 |
| 207 /* package-local */void init(byte[] data, int offset, int length) { | 207 /* package-local */void init(byte[] data, int offset, int length) { |
