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