Mercurial > hg4j
comparison src/org/tmatesoft/hg/repo/WorkingCopyStatusCollector.java @ 90:a95c700408a9
Correctly report copy/rename events for rev..working copy case
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Wed, 26 Jan 2011 06:31:40 +0100 |
| parents | 42bcb4bffd17 |
| children | c2ce1cfaeb9e |
comparison
equal
deleted
inserted
replaced
| 89:42bcb4bffd17 | 90:a95c700408a9 |
|---|---|
| 101 if (hgIgnore.isIgnored(fname)) { | 101 if (hgIgnore.isIgnored(fname)) { |
| 102 inspector.ignored(fname); | 102 inspector.ignored(fname); |
| 103 } else if (knownEntries.remove(fname)) { | 103 } else if (knownEntries.remove(fname)) { |
| 104 // modified, added, removed, clean | 104 // modified, added, removed, clean |
| 105 if (collect != null) { // need to check against base revision, not FS file | 105 if (collect != null) { // need to check against base revision, not FS file |
| 106 checkLocalStatusAgainstBaseRevision(baseRevFiles, collect, fname, f, inspector); | 106 checkLocalStatusAgainstBaseRevision(baseRevFiles, collect, baseRevision, fname, f, inspector); |
| 107 baseRevFiles.remove(fname); | 107 baseRevFiles.remove(fname); |
| 108 } else { | 108 } else { |
| 109 checkLocalStatusAgainstFile(fname, f, inspector); | 109 checkLocalStatusAgainstFile(fname, f, inspector); |
| 110 } | 110 } |
| 111 } else { | 111 } else { |
| 163 inspector.modified(fname); | 163 inspector.modified(fname); |
| 164 } | 164 } |
| 165 } | 165 } |
| 166 | 166 |
| 167 // XXX refactor checkLocalStatus methods in more OO way | 167 // XXX refactor checkLocalStatus methods in more OO way |
| 168 private void checkLocalStatusAgainstBaseRevision(Set<String> baseRevNames, ManifestRevisionInspector collect, String fname, File f, StatusCollector.Inspector inspector) { | 168 private void checkLocalStatusAgainstBaseRevision(Set<String> baseRevNames, ManifestRevisionInspector collect, int baseRevision, String fname, File f, StatusCollector.Inspector inspector) { |
| 169 // fname is in the dirstate, either Normal, Added, Removed or Merged | 169 // fname is in the dirstate, either Normal, Added, Removed or Merged |
| 170 Nodeid nid1 = collect.nodeid(fname); | 170 Nodeid nid1 = collect.nodeid(fname); |
| 171 String flags = collect.flags(fname); | 171 String flags = collect.flags(fname); |
| 172 HgDirstate.Record r; | 172 HgDirstate.Record r; |
| 173 if (nid1 == null) { | 173 if (nid1 == null) { |
| 174 // normal: added? | 174 // normal: added? |
| 175 // added: not known at the time of baseRevision, shall report | 175 // added: not known at the time of baseRevision, shall report |
| 176 // merged: was not known, report as added? | 176 // merged: was not known, report as added? |
| 177 if ((r = getDirstate().checkAdded(fname)) != null) { | 177 if ((r = getDirstate().checkNormal(fname)) != null) { |
| 178 String origin = StatusCollector.getOriginIfCopy(repo, fname, baseRevNames, baseRevision); | |
| 179 if (origin != null) { | |
| 180 inspector.copied(origin, fname); | |
| 181 return; | |
| 182 } | |
| 183 } else if ((r = getDirstate().checkAdded(fname)) != null) { | |
| 178 if (r.name2 != null && baseRevNames.contains(r.name2)) { | 184 if (r.name2 != null && baseRevNames.contains(r.name2)) { |
| 179 baseRevNames.remove(r.name2); | 185 baseRevNames.remove(r.name2); // XXX surely I shall not report rename source as Removed? |
| 180 inspector.copied(r.name2, fname); | 186 inspector.copied(r.name2, fname); |
| 181 return; | 187 return; |
| 182 } | 188 } |
| 183 // fall-through, report as added | 189 // fall-through, report as added |
| 184 } else if (getDirstate().checkRemoved(fname) != null) { | 190 } else if (getDirstate().checkRemoved(fname) != null) { |
