Mercurial > hg4j
comparison src/com/tmate/hgkit/ll/StatusCollector.java @ 68:0e499fed9b3d
StatusCommand with tests. Extra constants to indicate common revision cases
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Sat, 22 Jan 2011 22:11:24 +0100 |
parents | 19e9e220bf68 |
children |
comparison
equal
deleted
inserted
replaced
67:64bddc2dcc0e | 68:0e499fed9b3d |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2011 Artem Tikhomirov | 2 * Copyright (c) 2011 Artem Tikhomirov |
3 */ | 3 */ |
4 package com.tmate.hgkit.ll; | 4 package com.tmate.hgkit.ll; |
5 | |
6 import static com.tmate.hgkit.ll.HgRepository.BAD_REVISION; | |
7 import static com.tmate.hgkit.ll.HgRepository.TIP; | |
5 | 8 |
6 import java.util.Collection; | 9 import java.util.Collection; |
7 import java.util.Collections; | 10 import java.util.Collections; |
8 import java.util.HashMap; | 11 import java.util.HashMap; |
9 import java.util.LinkedHashMap; | 12 import java.util.LinkedHashMap; |
24 public StatusCollector(HgRepository hgRepo) { | 27 public StatusCollector(HgRepository hgRepo) { |
25 this.repo = hgRepo; | 28 this.repo = hgRepo; |
26 cache = new HashMap<Integer, ManifestRevisionInspector>(); | 29 cache = new HashMap<Integer, ManifestRevisionInspector>(); |
27 ManifestRevisionInspector emptyFakeState = new ManifestRevisionInspector(-1, -1); | 30 ManifestRevisionInspector emptyFakeState = new ManifestRevisionInspector(-1, -1); |
28 emptyFakeState.begin(-1, null); | 31 emptyFakeState.begin(-1, null); |
29 emptyFakeState.end(-1); | 32 emptyFakeState.end(-1); // FIXME HgRepo.TIP == -1 as well, need to distinguish fake "prior to first" revision from "the very last" |
30 cache.put(-1, emptyFakeState); | 33 cache.put(-1, emptyFakeState); |
31 } | 34 } |
32 | 35 |
33 public HgRepository getRepo() { | 36 public HgRepository getRepo() { |
34 return repo; | 37 return repo; |
65 if (inspector == null) { | 68 if (inspector == null) { |
66 throw new IllegalArgumentException(); | 69 throw new IllegalArgumentException(); |
67 } | 70 } |
68 if (inspector instanceof Record) { | 71 if (inspector instanceof Record) { |
69 ((Record) inspector).init(rev1, rev2, this); | 72 ((Record) inspector).init(rev1, rev2, this); |
73 } | |
74 if (rev1 == TIP) { | |
75 rev1 = repo.getManifest().getRevisionCount() - 1; | |
76 } | |
77 if (rev2 == TIP) { | |
78 rev2 = repo.getManifest().getRevisionCount() - 1; // XXX add Revlog.tip() func ? | |
70 } | 79 } |
71 // in fact, rev1 and rev2 are often next (or close) to each other, | 80 // in fact, rev1 and rev2 are often next (or close) to each other, |
72 // thus, we can optimize Manifest reads here (manifest.walk(rev1, rev2)) | 81 // thus, we can optimize Manifest reads here (manifest.walk(rev1, rev2)) |
73 ManifestRevisionInspector r1, r2; | 82 ManifestRevisionInspector r1, r2; |
74 if (!cache.containsKey(rev1) && !cache.containsKey(rev2) && Math.abs(rev1 - rev2) < 5 /*subjective equivalent of 'close enough'*/) { | 83 if (!cache.containsKey(rev1) && !cache.containsKey(rev2) && Math.abs(rev1 - rev2) < 5 /*subjective equivalent of 'close enough'*/) { |
143 endRev = endRevision; | 152 endRev = endRevision; |
144 statusHelper = self; | 153 statusHelper = self; |
145 } | 154 } |
146 | 155 |
147 public Nodeid nodeidBeforeChange(String fname) { | 156 public Nodeid nodeidBeforeChange(String fname) { |
157 if (statusHelper == null || startRev == BAD_REVISION) { | |
158 return null; | |
159 } | |
148 if ((modified == null || !modified.contains(fname)) && (removed == null || !removed.contains(fname))) { | 160 if ((modified == null || !modified.contains(fname)) && (removed == null || !removed.contains(fname))) { |
149 return null; | 161 return null; |
150 } | 162 } |
151 return statusHelper.raw(startRev).nodeid(startRev, fname); | 163 return statusHelper.raw(startRev).nodeid(startRev, fname); |
152 } | 164 } |
153 public Nodeid nodeidAfterChange(String fname) { | 165 public Nodeid nodeidAfterChange(String fname) { |
166 if (statusHelper == null || endRev == BAD_REVISION) { | |
167 return null; | |
168 } | |
154 if ((modified == null || !modified.contains(fname)) && (added == null || !added.contains(fname))) { | 169 if ((modified == null || !modified.contains(fname)) && (added == null || !added.contains(fname))) { |
155 return null; | 170 return null; |
156 } | 171 } |
157 return statusHelper.raw(endRev).nodeid(endRev, fname); | 172 return statusHelper.raw(endRev).nodeid(endRev, fname); |
158 } | 173 } |