Mercurial > hg4j
comparison src/com/tmate/hgkit/ll/StatusCollector.java @ 56:576d6e8a09f6
Analog of 'hg status --change' command
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 17 Jan 2011 05:15:13 +0100 |
parents | 05829a70b30b |
children | b771e94a4f7c |
comparison
equal
deleted
inserted
replaced
55:05829a70b30b | 56:576d6e8a09f6 |
---|---|
22 private final Map<Integer, ManifestRevisionInspector> cache; // sparse array, in fact | 22 private final Map<Integer, ManifestRevisionInspector> cache; // sparse array, in fact |
23 | 23 |
24 public StatusCollector(HgRepository hgRepo) { | 24 public StatusCollector(HgRepository hgRepo) { |
25 this.repo = hgRepo; | 25 this.repo = hgRepo; |
26 cache = new HashMap<Integer, ManifestRevisionInspector>(); | 26 cache = new HashMap<Integer, ManifestRevisionInspector>(); |
27 ManifestRevisionInspector emptyFakeState = new ManifestRevisionInspector(-1, -1); | |
28 emptyFakeState.begin(-1, null); | |
29 emptyFakeState.end(-1); | |
30 cache.put(-1, emptyFakeState); | |
27 } | 31 } |
28 | 32 |
29 private ManifestRevisionInspector get(int rev) { | 33 private ManifestRevisionInspector get(int rev) { |
30 ManifestRevisionInspector i = cache.get(rev); | 34 ManifestRevisionInspector i = cache.get(rev); |
31 if (i == null) { | 35 if (i == null) { |
33 cache.put(rev, i); | 37 cache.put(rev, i); |
34 repo.getManifest().walk(rev, rev, i); | 38 repo.getManifest().walk(rev, rev, i); |
35 } | 39 } |
36 return i; | 40 return i; |
37 } | 41 } |
38 | 42 |
43 // hg status --change <rev> | |
44 public void change(int rev, Inspector inspector) { | |
45 int[] parents = new int[2]; | |
46 repo.getChangelog().parents(rev, parents, null, null); | |
47 walk(parents[0], rev, inspector); | |
48 } | |
49 | |
50 // I assume revision numbers are the same for changelog and manifest - here | |
51 // user would like to pass changelog revision numbers, and I use them directly to walk manifest. | |
52 // if this assumption is wrong, fix this (lookup manifest revisions from changeset). | |
39 public void walk(int rev1, int rev2, Inspector inspector) { | 53 public void walk(int rev1, int rev2, Inspector inspector) { |
40 if (rev1 == rev2) { | 54 if (rev1 == rev2) { |
41 throw new IllegalArgumentException(); | 55 throw new IllegalArgumentException(); |
42 } | 56 } |
43 // in fact, rev1 and rev2 are often next (or close) to each other, | 57 // in fact, rev1 and rev2 are often next (or close) to each other, |
196 private final int baseRevision; | 210 private final int baseRevision; |
197 private int r = -1; // cursor | 211 private int r = -1; // cursor |
198 | 212 |
199 /** | 213 /** |
200 * [minRev, maxRev] | 214 * [minRev, maxRev] |
215 * [-1,-1] also accepted (for fake empty instance) | |
201 * @param minRev - inclusive | 216 * @param minRev - inclusive |
202 * @param maxRev - inclusive | 217 * @param maxRev - inclusive |
203 */ | 218 */ |
204 @SuppressWarnings("unchecked") | 219 @SuppressWarnings("unchecked") |
205 public ManifestRevisionInspector(int minRev, int maxRev) { | 220 public ManifestRevisionInspector(int minRev, int maxRev) { |