Mercurial > jhg
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) { |
