Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/RevlogStream.java @ 644:1deea2f33218
Push: phase1 - prepare bundle with changes
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Wed, 19 Jun 2013 16:04:24 +0200 |
| parents | 6526d8adbc0f |
| children | bcbcc318f250 |
comparison
equal
deleted
inserted
replaced
| 643:a8ce405da1f5 | 644:1deea2f33218 |
|---|---|
| 15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
| 16 */ | 16 */ |
| 17 package org.tmatesoft.hg.internal; | 17 package org.tmatesoft.hg.internal; |
| 18 | 18 |
| 19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; | 19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; |
| 20 import static org.tmatesoft.hg.repo.HgRepository.NO_REVISION; | |
| 20 import static org.tmatesoft.hg.repo.HgRepository.TIP; | 21 import static org.tmatesoft.hg.repo.HgRepository.TIP; |
| 21 import static org.tmatesoft.hg.internal.Internals.REVLOGV1_RECORD_SIZE; | 22 import static org.tmatesoft.hg.internal.Internals.REVLOGV1_RECORD_SIZE; |
| 22 | 23 |
| 23 import java.io.File; | 24 import java.io.File; |
| 24 import java.io.IOException; | 25 import java.io.IOException; |
| 232 * @throws HgInvalidRevisionException if revisionIndex argument doesn't represent a valid record in the revlog | 233 * @throws HgInvalidRevisionException if revisionIndex argument doesn't represent a valid record in the revlog |
| 233 */ | 234 */ |
| 234 public int baseRevision(int revisionIndex) throws HgInvalidControlFileException, HgInvalidRevisionException { | 235 public int baseRevision(int revisionIndex) throws HgInvalidControlFileException, HgInvalidRevisionException { |
| 235 revisionIndex = checkRevisionIndex(revisionIndex); | 236 revisionIndex = checkRevisionIndex(revisionIndex); |
| 236 return getBaseRevision(revisionIndex); | 237 return getBaseRevision(revisionIndex); |
| 238 } | |
| 239 | |
| 240 /** | |
| 241 * Read indexes of parent revisions | |
| 242 * @param revisionIndex index of child revision | |
| 243 * @param parents array to hold return value, length >= 2 | |
| 244 * @return value of <code>parents</code> parameter for convenience | |
| 245 * @throws HgInvalidControlFileException if attempt to read index file failed | |
| 246 * @throws HgInvalidRevisionException if revisionIndex argument doesn't represent a valid record in the revlog | |
| 247 */ | |
| 248 public int[] parents(int revisionIndex, int[] parents) throws HgInvalidControlFileException, HgInvalidRevisionException { | |
| 249 assert parents.length > 1; | |
| 250 revisionIndex = checkRevisionIndex(revisionIndex); | |
| 251 DataAccess daIndex = getIndexStream(true); | |
| 252 try { | |
| 253 int recordOffset = getIndexOffsetInt(revisionIndex); | |
| 254 daIndex.seek(recordOffset + 24); | |
| 255 int p1 = daIndex.readInt(); | |
| 256 int p2 = daIndex.readInt(); | |
| 257 // although NO_REVISION == -1, it doesn't hurt to ensure this | |
| 258 parents[0] = p1 == -1 ? NO_REVISION : p1; | |
| 259 parents[1] = p2 == -1 ? NO_REVISION : p2; | |
| 260 return parents; | |
| 261 } catch (IOException ex) { | |
| 262 throw new HgInvalidControlFileException("Parents lookup failed", ex, indexFile).setRevisionIndex(revisionIndex); | |
| 263 } finally { | |
| 264 daIndex.done(); | |
| 265 } | |
| 237 } | 266 } |
| 238 | 267 |
| 239 // Perhaps, RevlogStream should be limited to use of plain int revisions for access, | 268 // Perhaps, RevlogStream should be limited to use of plain int revisions for access, |
| 240 // while Nodeids should be kept on the level up, in Revlog. Guess, Revlog better keep | 269 // while Nodeids should be kept on the level up, in Revlog. Guess, Revlog better keep |
| 241 // map of nodeids, and once this comes true, we may get rid of this method. | 270 // map of nodeids, and once this comes true, we may get rid of this method. |
