comparison src/org/tmatesoft/hg/repo/HgStatusCollector.java @ 229:1ec6b327a6ac

Scope for status reworked: explicit files or a general matcher
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Tue, 31 May 2011 05:23:07 +0200
parents 26ad7827a62d
children 3fbfce107f94
comparison
equal deleted inserted replaced
228:fffe4f882248 229:1ec6b327a6ac
54 private final int cacheMaxSize = 50; // do not keep too much manifest revisions 54 private final int cacheMaxSize = 50; // do not keep too much manifest revisions
55 private PathPool pathPool; 55 private PathPool pathPool;
56 private final Pool<Nodeid> cacheNodes; 56 private final Pool<Nodeid> cacheNodes;
57 private final Pool<String> cacheFilenames; // XXX in fact, need to think if use of PathPool directly instead is better solution 57 private final Pool<String> cacheFilenames; // XXX in fact, need to think if use of PathPool directly instead is better solution
58 private final ManifestRevisionInspector emptyFakeState; 58 private final ManifestRevisionInspector emptyFakeState;
59 private Path.Matcher scope; 59 private Path.Matcher scope = new Path.Matcher.Any();
60 60
61 61
62 public HgStatusCollector(HgRepository hgRepo) { 62 public HgStatusCollector(HgRepository hgRepo) {
63 this.repo = hgRepo; 63 this.repo = hgRepo;
64 cache = new TreeMap<Integer, ManifestRevisionInspector>(); 64 cache = new TreeMap<Integer, ManifestRevisionInspector>();
150 * Allows sharing of a common path cache 150 * Allows sharing of a common path cache
151 */ 151 */
152 public void setPathPool(PathPool pathPool) { 152 public void setPathPool(PathPool pathPool) {
153 this.pathPool = pathPool; 153 this.pathPool = pathPool;
154 } 154 }
155 155
156 /**
157 * Limit activity of the collector to certain sub-tree of the repository.
158 * @param scopeMatcher tells whether collector shall report specific path, can be <code>null</code>
159 */
160 public void setScope(Path.Matcher scopeMatcher) {
161 // do not assign null, ever
162 scope = scopeMatcher == null ? new Path.Matcher.Any() : scopeMatcher;
163 }
156 164
157 // hg status --change <rev> 165 // hg status --change <rev>
158 public void change(int rev, HgStatusInspector inspector) { 166 public void change(int rev, HgStatusInspector inspector) {
159 int[] parents = new int[2]; 167 int[] parents = new int[2];
160 repo.getChangelog().parents(rev, parents, null, null); 168 repo.getChangelog().parents(rev, parents, null, null);
215 } 223 }
216 r1 = get(rev1); 224 r1 = get(rev1);
217 r2 = get(rev2); 225 r2 = get(rev2);
218 226
219 PathPool pp = getPathPool(); 227 PathPool pp = getPathPool();
220
221 TreeSet<String> r1Files = new TreeSet<String>(r1.files()); 228 TreeSet<String> r1Files = new TreeSet<String>(r1.files());
222 class MatchAny implements Path.Matcher {
223 public boolean accept(Path path) {
224 return true;
225 }
226 };
227 if (scope == null) {
228 scope = new MatchAny(); // FIXME configure from outside
229 }
230 for (String fname : r2.files()) { 229 for (String fname : r2.files()) {
231 final Path r2filePath = pp.path(fname); 230 final Path r2filePath = pp.path(fname);
232 if (!scope.accept(r2filePath)) { 231 if (!scope.accept(r2filePath)) {
233 continue; 232 continue;
234 } 233 }