comparison src/com/tmate/hgkit/ll/LocalHgRepo.java @ 21:e929cecae4e1

Refactor to move revlog content to base class
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Wed, 05 Jan 2011 04:10:28 +0100
parents 11cfabe692b3
children 603806cd2dc6
comparison
equal deleted inserted replaced
20:11cfabe692b3 21:e929cecae4e1
45 return repoLocation; 45 return repoLocation;
46 } 46 }
47 47
48 @Override 48 @Override
49 public void status(int rev1, int rev2, final StatusInspector inspector) { 49 public void status(int rev1, int rev2, final StatusInspector inspector) {
50 final HashMap<String, Nodeid> idsMap = new HashMap<String, Nodeid>(); 50 final ManifestRevisionCollector collect = new ManifestRevisionCollector();
51 final HashMap<String, String> flagsMap = new HashMap<String, String>();
52 HgManifest.Inspector collect = new HgManifest.Inspector() {
53
54
55 public boolean next(Nodeid nid, String fname, String flags) {
56 idsMap.put(fname, nid);
57 flagsMap.put(fname, flags);
58 return true;
59 }
60
61 public boolean end(int revision) {
62 return false;
63 }
64
65 public boolean begin(int revision, Nodeid nid) {
66 return true;
67 }
68 };
69 getManifest().walk(rev1, rev1, collect); 51 getManifest().walk(rev1, rev1, collect);
70 52
71 HgManifest.Inspector compare = new HgManifest.Inspector() { 53 HgManifest.Inspector compare = new HgManifest.Inspector() {
72 54
73 public boolean begin(int revision, Nodeid nid) { 55 public boolean begin(int revision, Nodeid nid) {
74 return true; 56 return true;
75 } 57 }
76 58
77 public boolean next(Nodeid nid, String fname, String flags) { 59 public boolean next(Nodeid nid, String fname, String flags) {
78 Nodeid nidR1 = idsMap.remove(fname); 60 Nodeid nidR1 = collect.idsMap.remove(fname);
79 String flagsR1 = flagsMap.remove(fname); 61 String flagsR1 = collect.flagsMap.remove(fname);
80 if (nidR1 == null) { 62 if (nidR1 == null) {
81 inspector.added(fname); 63 inspector.added(fname);
82 } else { 64 } else {
83 if (nidR1.compareTo(nid) == 0 && ((flags == null && flagsR1 == null) || flags.equals(flagsR1))) { 65 if (nidR1.compareTo(nid) == 0 && ((flags == null && flagsR1 == null) || flags.equals(flagsR1))) {
84 inspector.clean(fname); 66 inspector.clean(fname);
88 } 70 }
89 return true; 71 return true;
90 } 72 }
91 73
92 public boolean end(int revision) { 74 public boolean end(int revision) {
93 for (String fname : idsMap.keySet()) { 75 for (String fname : collect.idsMap.keySet()) {
94 inspector.removed(fname); 76 inspector.removed(fname);
95 } 77 }
96 if (idsMap.size() != flagsMap.size()) { 78 if (collect.idsMap.size() != collect.flagsMap.size()) {
97 throw new IllegalStateException(); 79 throw new IllegalStateException();
98 } 80 }
99 return false; 81 return false;
100 } 82 }
101 }; 83 };
102 getManifest().walk(rev2, rev2, compare); 84 getManifest().walk(rev2, rev2, compare);
103 } 85 }
104 86
105 public void statusLocal(int rev1, StatusInspector inspector) { 87 public void statusLocal(int baseRevision, StatusInspector inspector) {
106 LinkedList<File> folders = new LinkedList<File>(); 88 LinkedList<File> folders = new LinkedList<File>();
107 final File rootDir = repoDir.getParentFile(); 89 final File rootDir = repoDir.getParentFile();
108 folders.add(rootDir); 90 folders.add(rootDir);
109 final HgDirstate dirstate = loadDirstate(); 91 final HgDirstate dirstate = loadDirstate();
110 final HgIgnore hgignore = loadIgnore(); 92 final HgIgnore hgignore = loadIgnore();
111 TreeSet<String> knownEntries = dirstate.all(); 93 TreeSet<String> knownEntries = dirstate.all();
94 final boolean isTipBase = baseRevision == TIP || baseRevision == getManifest().revisionCount();
95 final ManifestRevisionCollector collect = isTipBase ? null : new ManifestRevisionCollector();
96 if (!isTipBase) {
97 getManifest().walk(baseRevision, baseRevision, collect);
98 }
112 do { 99 do {
113 File d = folders.removeFirst(); 100 File d = folders.removeFirst();
114 for (File f : d.listFiles()) { 101 for (File f : d.listFiles()) {
115 if (f.isDirectory()) { 102 if (f.isDirectory()) {
116 if (!".hg".equals(f.getName())) { 103 if (!".hg".equals(f.getName())) {
334 if (path.startsWith("/")) { 321 if (path.startsWith("/")) {
335 path = path.substring(1); 322 path = path.substring(1);
336 } 323 }
337 return path; 324 return path;
338 } 325 }
326
327 private final class ManifestRevisionCollector implements HgManifest.Inspector {
328 final HashMap<String, Nodeid> idsMap = new HashMap<String, Nodeid>();
329 final HashMap<String, String> flagsMap = new HashMap<String, String>();
330
331 public boolean next(Nodeid nid, String fname, String flags) {
332 idsMap.put(fname, nid);
333 flagsMap.put(fname, flags);
334 return true;
335 }
336
337 public boolean end(int revision) {
338 return false;
339 }
340
341 public boolean begin(int revision, Nodeid nid) {
342 return true;
343 }
344 }
339 } 345 }