Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/HgStatusCollector.java @ 222:373e07cd3991
Due to discrepancy in manifest and changelor indexes, wrong manifest revisions got cached and compared
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 19 May 2011 05:02:07 +0200 |
| parents | 04735ce6bed2 |
| children | 26ad7827a62d |
comparison
equal
deleted
inserted
replaced
| 221:04735ce6bed2 | 222:373e07cd3991 |
|---|---|
| 63 cache = new TreeMap<Integer, ManifestRevisionInspector>(); | 63 cache = new TreeMap<Integer, ManifestRevisionInspector>(); |
| 64 cacheNodes = new Pool<Nodeid>(); | 64 cacheNodes = new Pool<Nodeid>(); |
| 65 cacheFilenames = new Pool<String>(); | 65 cacheFilenames = new Pool<String>(); |
| 66 | 66 |
| 67 emptyFakeState = new ManifestRevisionInspector(null, null); | 67 emptyFakeState = new ManifestRevisionInspector(null, null); |
| 68 emptyFakeState.begin(-1, null); | 68 emptyFakeState.begin(-1, null, -1); |
| 69 emptyFakeState.end(-1); | 69 emptyFakeState.end(-1); |
| 70 } | 70 } |
| 71 | 71 |
| 72 public HgRepository getRepo() { | 72 public HgRepository getRepo() { |
| 73 return repo; | 73 return repo; |
| 101 } | 101 } |
| 102 repo.getManifest().walk(minRev, maxRev, new HgManifest.Inspector() { | 102 repo.getManifest().walk(minRev, maxRev, new HgManifest.Inspector() { |
| 103 private ManifestRevisionInspector delegate; | 103 private ManifestRevisionInspector delegate; |
| 104 private boolean cacheHit; // range may include revisions we already know about, do not re-create them | 104 private boolean cacheHit; // range may include revisions we already know about, do not re-create them |
| 105 | 105 |
| 106 public boolean begin(int revision, Nodeid nid) { | 106 public boolean begin(int manifestRevision, Nodeid nid, int changelogRevision) { |
| 107 assert delegate == null; | 107 assert delegate == null; |
| 108 if (cache.containsKey(revision)) { // don't need to check emptyFakeState hit as revision never -1 here | 108 if (cache.containsKey(changelogRevision)) { // don't need to check emptyFakeState hit as revision never -1 here |
| 109 cacheHit = true; | 109 cacheHit = true; |
| 110 } else { | 110 } else { |
| 111 cache.put(revision, delegate = new ManifestRevisionInspector(cacheNodes, cacheFilenames)); | 111 cache.put(changelogRevision, delegate = new ManifestRevisionInspector(cacheNodes, cacheFilenames)); |
| 112 // cache may grow bigger than max size here, but it's ok as present simplistic cache clearing mechanism may | 112 // cache may grow bigger than max size here, but it's ok as present simplistic cache clearing mechanism may |
| 113 // otherwise remove entries we just added | 113 // otherwise remove entries we just added |
| 114 delegate.begin(revision, nid); | 114 delegate.begin(manifestRevision, nid, changelogRevision); |
| 115 cacheHit = false; | 115 cacheHit = false; |
| 116 } | 116 } |
| 117 return true; | 117 return true; |
| 118 } | 118 } |
| 119 | 119 |
| 456 public boolean end(int revision) { | 456 public boolean end(int revision) { |
| 457 // in fact, this class cares about single revision | 457 // in fact, this class cares about single revision |
| 458 return false; | 458 return false; |
| 459 } | 459 } |
| 460 | 460 |
| 461 public boolean begin(int revision, Nodeid nid) { | 461 public boolean begin(int revision, Nodeid nid, int changelogRevision) { |
| 462 return true; | 462 return true; |
| 463 } | 463 } |
| 464 } | 464 } |
| 465 | 465 |
| 466 } | 466 } |
