comparison src/org/tmatesoft/hg/repo/Revlog.java @ 317:09628675bcee

Rework file history build approach to match rest of the API
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 29 Sep 2011 03:20:28 +0200
parents 3f40262153a4
children 283b294d1079
comparison
equal deleted inserted replaced
316:ee6b467c1a5f 317:09628675bcee
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.TIP; 20 import static org.tmatesoft.hg.repo.HgRepository.TIP;
21 21
22 import java.io.IOException; 22 import java.io.IOException;
23 import java.nio.ByteBuffer; 23 import java.nio.ByteBuffer;
24 import java.util.ArrayList;
24 import java.util.Arrays; 25 import java.util.Arrays;
25 import java.util.Collection; 26 import java.util.Collection;
26 import java.util.HashSet; 27 import java.util.HashSet;
27 import java.util.LinkedList; 28 import java.util.LinkedList;
28 import java.util.List; 29 import java.util.List;
84 } 85 }
85 86
86 public final Nodeid getRevision(int revision) { 87 public final Nodeid getRevision(int revision) {
87 // XXX cache nodeids? 88 // XXX cache nodeids?
88 return Nodeid.fromBinary(content.nodeid(revision), 0); 89 return Nodeid.fromBinary(content.nodeid(revision), 0);
90 }
91
92 public final List<Nodeid> getRevisions(int... revisions) {
93 ArrayList<Nodeid> rv = new ArrayList<Nodeid>(revisions.length);
94 Arrays.sort(revisions);
95 getRevisionsInternal(rv, revisions);
96 return rv;
97 }
98
99 /*package-local*/ void getRevisionsInternal(final List<Nodeid> retVal, int[] sortedRevs) {
100 // once I have getRevisionMap and may find out whether it is avalable from cache,
101 // may use it, perhaps only for small number of revisions
102 content.iterate(sortedRevs, false, new RevlogStream.Inspector() {
103
104 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess data) {
105 retVal.add(Nodeid.fromBinary(nodeid, 0));
106 }
107 });
89 } 108 }
90 109
91 /** 110 /**
92 * Get local revision number (index) of the specified revision. 111 * Get local revision number (index) of the specified revision.
93 * 112 *
193 content.iterate(parentRevisions[1], parentRevisions[1], false, pc); 212 content.iterate(parentRevisions[1], parentRevisions[1], false, pc);
194 System.arraycopy(pc.nodeid, 0, parent2, 0, 20); 213 System.arraycopy(pc.nodeid, 0, parent2, 0, 20);
195 } 214 }
196 } 215 }
197 } 216 }
198 217
199 /* 218 /*
200 * XXX think over if it's better to do either: 219 * XXX think over if it's better to do either:
201 * pw = getChangelog().new ParentWalker(); pw.init() and pass pw instance around as needed 220 * pw = getChangelog().new ParentWalker(); pw.init() and pass pw instance around as needed
202 * or 221 * or
203 * add Revlog#getParentWalker(), static class, make cons() and #init package-local, and keep SoftReference to allow walker reuse. 222 * add Revlog#getParentWalker(), static class, make cons() and #init package-local, and keep SoftReference to allow walker reuse.