Mercurial > hg4j
comparison src/com/tmate/hgkit/ll/RevlogStream.java @ 24:d4fdd1845b3f
Nodeid with array of exactly 20 bytes
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Thu, 06 Jan 2011 04:42:15 +0100 |
parents | 603806cd2dc6 |
children | 565ce0835674 |
comparison
equal
deleted
inserted
replaced
23:6f9aca1a97be | 24:d4fdd1845b3f |
---|---|
76 public int findLocalRevisionNumber(Nodeid nodeid) { | 76 public int findLocalRevisionNumber(Nodeid nodeid) { |
77 // XXX this one may be implemented with iterate() once there's mechanism to stop iterations | 77 // XXX this one may be implemented with iterate() once there's mechanism to stop iterations |
78 final int indexSize = revisionCount(); | 78 final int indexSize = revisionCount(); |
79 DataAccess daIndex = getIndexStream(); | 79 DataAccess daIndex = getIndexStream(); |
80 try { | 80 try { |
81 byte[] nodeidBuf = new byte[20]; | |
81 for (int i = 0; i < indexSize; i++) { | 82 for (int i = 0; i < indexSize; i++) { |
82 daIndex.skip(8); | 83 daIndex.skip(8); |
83 int compressedLen = daIndex.readInt(); | 84 int compressedLen = daIndex.readInt(); |
84 daIndex.skip(20); | 85 daIndex.skip(20); |
85 byte[] buf = new byte[20]; | 86 daIndex.readBytes(nodeidBuf, 0, 20); |
86 daIndex.readBytes(buf, 0, 20); | 87 if (nodeid.equalsTo(nodeidBuf)) { |
87 if (nodeid.equalsTo(buf)) { | |
88 return i; | 88 return i; |
89 } | 89 } |
90 daIndex.skip(inline ? 12 + compressedLen : 12); | 90 daIndex.skip(inline ? 12 + compressedLen : 12); |
91 } | 91 } |
92 } catch (IOException ex) { | 92 } catch (IOException ex) { |
127 daIndex = getIndexStream(); | 127 daIndex = getIndexStream(); |
128 if (needData && !inline) { | 128 if (needData && !inline) { |
129 daData = getDataStream(); | 129 daData = getDataStream(); |
130 } | 130 } |
131 try { | 131 try { |
132 byte[] nodeidBuf = new byte[20]; | |
132 byte[] lastData = null; | 133 byte[] lastData = null; |
133 int i; | 134 int i; |
134 boolean extraReadsToBaseRev = false; | 135 boolean extraReadsToBaseRev = false; |
135 if (needData && index.get(start).baseRevision < start) { | 136 if (needData && index.get(start).baseRevision < start) { |
136 i = index.get(start).baseRevision; | 137 i = index.get(start).baseRevision; |
148 int actualLen = daIndex.readInt(); | 149 int actualLen = daIndex.readInt(); |
149 int baseRevision = daIndex.readInt(); | 150 int baseRevision = daIndex.readInt(); |
150 int linkRevision = daIndex.readInt(); | 151 int linkRevision = daIndex.readInt(); |
151 int parent1Revision = daIndex.readInt(); | 152 int parent1Revision = daIndex.readInt(); |
152 int parent2Revision = daIndex.readInt(); | 153 int parent2Revision = daIndex.readInt(); |
153 byte[] buf = new byte[32]; | 154 // Hg has 32 bytes here, uses 20 for nodeid, and keeps 12 last bytes empty |
154 // XXX Hg keeps 12 last bytes empty, we move them into front here | 155 daIndex.readBytes(nodeidBuf, 0, 20); |
155 daIndex.readBytes(buf, 12, 20); | |
156 daIndex.skip(12); | 156 daIndex.skip(12); |
157 byte[] data = null; | 157 byte[] data = null; |
158 if (needData) { | 158 if (needData) { |
159 byte[] dataBuf = new byte[compressedLen]; | 159 byte[] dataBuf = new byte[compressedLen]; |
160 if (inline) { | 160 if (inline) { |
205 if (inline) { | 205 if (inline) { |
206 daIndex.skip(compressedLen); | 206 daIndex.skip(compressedLen); |
207 } | 207 } |
208 } | 208 } |
209 if (!extraReadsToBaseRev || i >= start) { | 209 if (!extraReadsToBaseRev || i >= start) { |
210 inspector.next(i, actualLen, baseRevision, linkRevision, parent1Revision, parent2Revision, buf, data); | 210 inspector.next(i, actualLen, baseRevision, linkRevision, parent1Revision, parent2Revision, nodeidBuf, data); |
211 } | 211 } |
212 lastData = data; | 212 lastData = data; |
213 } | 213 } |
214 } catch (IOException ex) { | 214 } catch (IOException ex) { |
215 throw new IllegalStateException(ex); // FIXME need better handling | 215 throw new IllegalStateException(ex); // FIXME need better handling |