comparison src/com/tmate/hgkit/ll/Revlog.java @ 51:9429c7bd1920 wrap-data-access

Try DataAccess to reach revision data instead of plain byte arrays
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Sun, 16 Jan 2011 01:20:26 +0100
parents 26e3eeaa3962
children
comparison
equal deleted inserted replaced
50:f1db8610da62 51:9429c7bd1920
7 import java.util.Collections; 7 import java.util.Collections;
8 import java.util.HashMap; 8 import java.util.HashMap;
9 import java.util.LinkedHashSet; 9 import java.util.LinkedHashSet;
10 import java.util.Map; 10 import java.util.Map;
11 import java.util.Set; 11 import java.util.Set;
12
13 import com.tmate.hgkit.fs.DataAccess;
12 14
13 /** 15 /**
14 * 16 *
15 * @author artem 17 * @author artem
16 */ 18 */
68 * @param revision - repo-local index of this file change (not a changelog revision number!) 70 * @param revision - repo-local index of this file change (not a changelog revision number!)
69 */ 71 */
70 public byte[] content(int revision) { 72 public byte[] content(int revision) {
71 final byte[][] dataPtr = new byte[1][]; 73 final byte[][] dataPtr = new byte[1][];
72 Revlog.Inspector insp = new Revlog.Inspector() { 74 Revlog.Inspector insp = new Revlog.Inspector() {
73 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { 75 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess data) {
74 dataPtr[0] = data; 76 dataPtr[0] = data.byteArray();
75 } 77 }
76 }; 78 };
77 content.iterate(revision, revision, true, insp); 79 content.iterate(revision, revision, true, insp);
78 return dataPtr[0]; 80 return dataPtr[0];
79 } 81 }
82 // instantly - e.g. calculate hash, or comparing two revisions 84 // instantly - e.g. calculate hash, or comparing two revisions
83 // XXX seems that RevlogStream is better place for this class. 85 // XXX seems that RevlogStream is better place for this class.
84 public interface Inspector { 86 public interface Inspector {
85 // XXX boolean retVal to indicate whether to continue? 87 // XXX boolean retVal to indicate whether to continue?
86 // TODO specify nodeid and data length, and reuse policy (i.e. if revlog stream doesn't reuse nodeid[] for each call) 88 // TODO specify nodeid and data length, and reuse policy (i.e. if revlog stream doesn't reuse nodeid[] for each call)
87 void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[/*20*/] nodeid, byte[] data); 89 void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[/*20*/] nodeid, DataAccess data);
88 } 90 }
89 91
90 /* 92 /*
91 * XXX think over if it's better to do either: 93 * XXX think over if it's better to do either:
92 * pw = getChangelog().new ParentWalker(); pw.init() and pass pw instance around as needed 94 * pw = getChangelog().new ParentWalker(); pw.init() and pass pw instance around as needed
113 allNodes = new LinkedHashSet<Nodeid>(); 115 allNodes = new LinkedHashSet<Nodeid>();
114 116
115 Inspector insp = new Inspector() { 117 Inspector insp = new Inspector() {
116 final Nodeid[] sequentialRevisionNodeids = new Nodeid[revisionCount]; 118 final Nodeid[] sequentialRevisionNodeids = new Nodeid[revisionCount];
117 int ix = 0; 119 int ix = 0;
118 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, byte[] data) { 120 public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess data) {
119 if (ix != revisionNumber) { 121 if (ix != revisionNumber) {
120 // XXX temp code, just to make sure I understand what's going on here 122 // XXX temp code, just to make sure I understand what's going on here
121 throw new IllegalStateException(); 123 throw new IllegalStateException();
122 } 124 }
123 if (parent1Revision >= revisionNumber || parent2Revision >= revisionNumber) { 125 if (parent1Revision >= revisionNumber || parent2Revision >= revisionNumber) {