comparison src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java @ 218:047b1dec7a04

Issue 7: Correctly handle manifest and changelog with different number of (or non-matching) revisions
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Tue, 17 May 2011 03:42:33 +0200
parents c9b305df0b89
children d63583b47bfa
comparison
equal deleted inserted replaced
217:e39cf474ef94 218:047b1dec7a04
16 */ 16 */
17 package org.tmatesoft.hg.repo; 17 package org.tmatesoft.hg.repo;
18 18
19 import static java.lang.Math.max; 19 import static java.lang.Math.max;
20 import static java.lang.Math.min; 20 import static java.lang.Math.min;
21 import static org.tmatesoft.hg.repo.HgRepository.*;
21 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; 22 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION;
22 import static org.tmatesoft.hg.repo.HgRepository.TIP; 23 import static org.tmatesoft.hg.repo.HgRepository.TIP;
23 24
24 import java.io.File; 25 import java.io.File;
25 import java.io.FileInputStream; 26 import java.io.FileInputStream;
59 public HgWorkingCopyStatusCollector(HgRepository hgRepo) { 60 public HgWorkingCopyStatusCollector(HgRepository hgRepo) {
60 this(hgRepo, hgRepo.createWorkingDirWalker()); 61 this(hgRepo, hgRepo.createWorkingDirWalker());
61 } 62 }
62 63
63 HgWorkingCopyStatusCollector(HgRepository hgRepo, FileIterator hgRepoWalker) { 64 HgWorkingCopyStatusCollector(HgRepository hgRepo, FileIterator hgRepoWalker) {
64 this.repo = hgRepo; 65 repo = hgRepo;
65 this.repoWalker = hgRepoWalker; 66 repoWalker = hgRepoWalker;
66 } 67 }
67 68
68 /** 69 /**
69 * Optionally, supply a collector instance that may cache (or have already cached) base revision 70 * Optionally, supply a collector instance that may cache (or have already cached) base revision
70 * @param sc may be null 71 * @param sc may be null
96 return dirstate; 97 return dirstate;
97 } 98 }
98 99
99 // may be invoked few times 100 // may be invoked few times
100 public void walk(int baseRevision, HgStatusInspector inspector) { 101 public void walk(int baseRevision, HgStatusInspector inspector) {
102 if (HgInternals.wrongLocalRevision(baseRevision) || baseRevision == BAD_REVISION || baseRevision == WORKING_COPY) {
103 throw new IllegalArgumentException(String.valueOf(baseRevision));
104 }
101 final HgIgnore hgIgnore = repo.getIgnore(); 105 final HgIgnore hgIgnore = repo.getIgnore();
102 TreeSet<String> knownEntries = getDirstate().all(); 106 TreeSet<String> knownEntries = getDirstate().all();
103 final boolean isTipBase; 107 final boolean isTipBase;
104 if (baseRevision == TIP) { 108 if (baseRevision == TIP) {
105 baseRevision = repo.getManifest().getRevisionCount() - 1; 109 baseRevision = repo.getChangelog().getLastRevision();
106 isTipBase = true; 110 isTipBase = true;
107 } else { 111 } else {
108 isTipBase = baseRevision == repo.getManifest().getRevisionCount() - 1; 112 isTipBase = baseRevision == repo.getChangelog().getLastRevision();
109 } 113 }
110 HgStatusCollector.ManifestRevisionInspector collect = null; 114 HgStatusCollector.ManifestRevisionInspector collect = null;
111 Set<String> baseRevFiles = Collections.emptySet(); 115 Set<String> baseRevFiles = Collections.emptySet();
112 if (!isTipBase) { 116 if (!isTipBase) {
113 if (baseRevisionCollector != null) { 117 if (baseRevisionCollector != null) {