Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java @ 141:8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Thu, 17 Feb 2011 04:08:34 +0100 |
| parents | 4a948ec83980 |
| children | 37a34044e6bd |
comparison
equal
deleted
inserted
replaced
| 140:1c1891ad1c73 | 141:8248aae33f7d |
|---|---|
| 32 | 32 |
| 33 import org.tmatesoft.hg.core.Nodeid; | 33 import org.tmatesoft.hg.core.Nodeid; |
| 34 import org.tmatesoft.hg.internal.FilterByteChannel; | 34 import org.tmatesoft.hg.internal.FilterByteChannel; |
| 35 import org.tmatesoft.hg.repo.HgStatusCollector.ManifestRevisionInspector; | 35 import org.tmatesoft.hg.repo.HgStatusCollector.ManifestRevisionInspector; |
| 36 import org.tmatesoft.hg.util.ByteChannel; | 36 import org.tmatesoft.hg.util.ByteChannel; |
| 37 import org.tmatesoft.hg.util.FileWalker; | 37 import org.tmatesoft.hg.util.FileIterator; |
| 38 import org.tmatesoft.hg.util.Path; | 38 import org.tmatesoft.hg.util.Path; |
| 39 import org.tmatesoft.hg.util.PathPool; | 39 import org.tmatesoft.hg.util.PathPool; |
| 40 import org.tmatesoft.hg.util.PathRewrite; | 40 import org.tmatesoft.hg.util.PathRewrite; |
| 41 | 41 |
| 42 /** | 42 /** |
| 45 * @author TMate Software Ltd. | 45 * @author TMate Software Ltd. |
| 46 */ | 46 */ |
| 47 public class HgWorkingCopyStatusCollector { | 47 public class HgWorkingCopyStatusCollector { |
| 48 | 48 |
| 49 private final HgRepository repo; | 49 private final HgRepository repo; |
| 50 private final FileWalker repoWalker; | 50 private final FileIterator repoWalker; |
| 51 private HgDirstate dirstate; | 51 private HgDirstate dirstate; |
| 52 private HgStatusCollector baseRevisionCollector; | 52 private HgStatusCollector baseRevisionCollector; |
| 53 private PathPool pathPool; | 53 private PathPool pathPool; |
| 54 | 54 |
| 55 public HgWorkingCopyStatusCollector(HgRepository hgRepo) { | 55 public HgWorkingCopyStatusCollector(HgRepository hgRepo) { |
| 56 this(hgRepo, hgRepo.createWorkingDirWalker()); | 56 this(hgRepo, hgRepo.createWorkingDirWalker()); |
| 57 } | 57 } |
| 58 | 58 |
| 59 HgWorkingCopyStatusCollector(HgRepository hgRepo, FileWalker hgRepoWalker) { | 59 HgWorkingCopyStatusCollector(HgRepository hgRepo, FileIterator hgRepoWalker) { |
| 60 this.repo = hgRepo; | 60 this.repo = hgRepo; |
| 61 this.repoWalker = hgRepoWalker; | 61 this.repoWalker = hgRepoWalker; |
| 62 } | 62 } |
| 63 | 63 |
| 64 /** | 64 /** |
| 120 } | 120 } |
| 121 repoWalker.reset(); | 121 repoWalker.reset(); |
| 122 final PathPool pp = getPathPool(); | 122 final PathPool pp = getPathPool(); |
| 123 while (repoWalker.hasNext()) { | 123 while (repoWalker.hasNext()) { |
| 124 repoWalker.next(); | 124 repoWalker.next(); |
| 125 String fname = repoWalker.name(); | 125 Path fname = repoWalker.name(); |
| 126 File f = repoWalker.file(); | 126 File f = repoWalker.file(); |
| 127 if (hgIgnore.isIgnored(fname)) { | 127 if (hgIgnore.isIgnored(fname)) { |
| 128 inspector.ignored(pp.path(fname)); | 128 inspector.ignored(pp.path(fname)); |
| 129 } else if (knownEntries.remove(fname)) { | 129 } else if (knownEntries.remove(fname.toString())) { |
| 130 // modified, added, removed, clean | 130 // modified, added, removed, clean |
| 131 if (collect != null) { // need to check against base revision, not FS file | 131 if (collect != null) { // need to check against base revision, not FS file |
| 132 checkLocalStatusAgainstBaseRevision(baseRevFiles, collect, baseRevision, fname, f, inspector); | 132 checkLocalStatusAgainstBaseRevision(baseRevFiles, collect, baseRevision, fname, f, inspector); |
| 133 baseRevFiles.remove(fname); | 133 baseRevFiles.remove(fname); |
| 134 } else { | 134 } else { |
| 165 } | 165 } |
| 166 | 166 |
| 167 //******************************************** | 167 //******************************************** |
| 168 | 168 |
| 169 | 169 |
| 170 private void checkLocalStatusAgainstFile(String fname, File f, HgStatusInspector inspector) { | 170 private void checkLocalStatusAgainstFile(Path fname, File f, HgStatusInspector inspector) { |
| 171 HgDirstate.Record r; | 171 HgDirstate.Record r; |
| 172 if ((r = getDirstate().checkNormal(fname)) != null) { | 172 if ((r = getDirstate().checkNormal(fname)) != null) { |
| 173 // either clean or modified | 173 // either clean or modified |
| 174 if (f.lastModified() / 1000 == r.time && r.size == f.length()) { | 174 if (f.lastModified() / 1000 == r.time && r.size == f.length()) { |
| 175 inspector.clean(getPathPool().path(fname)); | 175 inspector.clean(getPathPool().path(fname)); |
| 192 inspector.modified(getPathPool().path(fname)); | 192 inspector.modified(getPathPool().path(fname)); |
| 193 } | 193 } |
| 194 } | 194 } |
| 195 | 195 |
| 196 // XXX refactor checkLocalStatus methods in more OO way | 196 // XXX refactor checkLocalStatus methods in more OO way |
| 197 private void checkLocalStatusAgainstBaseRevision(Set<String> baseRevNames, ManifestRevisionInspector collect, int baseRevision, String fname, File f, HgStatusInspector inspector) { | 197 private void checkLocalStatusAgainstBaseRevision(Set<String> baseRevNames, ManifestRevisionInspector collect, int baseRevision, Path fname, File f, HgStatusInspector inspector) { |
| 198 // fname is in the dirstate, either Normal, Added, Removed or Merged | 198 // fname is in the dirstate, either Normal, Added, Removed or Merged |
| 199 Nodeid nid1 = collect.nodeid(fname); | 199 Nodeid nid1 = collect.nodeid(fname.toString()); |
| 200 String flags = collect.flags(fname); | 200 String flags = collect.flags(fname.toString()); |
| 201 HgDirstate.Record r; | 201 HgDirstate.Record r; |
| 202 if (nid1 == null) { | 202 if (nid1 == null) { |
| 203 // normal: added? | 203 // normal: added? |
| 204 // added: not known at the time of baseRevision, shall report | 204 // added: not known at the time of baseRevision, shall report |
| 205 // merged: was not known, report as added? | 205 // merged: was not known, report as added? |
| 206 if ((r = getDirstate().checkNormal(fname)) != null) { | 206 if ((r = getDirstate().checkNormal(fname)) != null) { |
| 207 String origin = HgStatusCollector.getOriginIfCopy(repo, fname, baseRevNames, baseRevision); | 207 Path origin = HgStatusCollector.getOriginIfCopy(repo, fname, baseRevNames, baseRevision); |
| 208 if (origin != null) { | 208 if (origin != null) { |
| 209 inspector.copied(getPathPool().path(origin), getPathPool().path(fname)); | 209 inspector.copied(getPathPool().path(origin), getPathPool().path(fname)); |
| 210 return; | 210 return; |
| 211 } | 211 } |
| 212 } else if ((r = getDirstate().checkAdded(fname)) != null) { | 212 } else if ((r = getDirstate().checkAdded(fname)) != null) { |
| 299 ex.printStackTrace(); | 299 ex.printStackTrace(); |
| 300 } | 300 } |
| 301 return false; | 301 return false; |
| 302 } | 302 } |
| 303 | 303 |
| 304 private static String todoGenerateFlags(String fname) { | 304 private static String todoGenerateFlags(Path fname) { |
| 305 // FIXME implement | 305 // FIXME implement |
| 306 return null; | 306 return null; |
| 307 } | 307 } |
| 308 | 308 |
| 309 } | 309 } |
