Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java @ 694:7efabe0cddcf
Speed up (a) file rename history to minimize file reads; (b) file.isCopy(int) to read metadata for few revisions at once (use pattern assumes earlier revisions are likely to be queried, too); (c) HgIgnore.isIgnored by caching matched initial fragments (to substitute more expensive Matcher.matches with cheaper HashMap.contains)
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Mon, 05 Aug 2013 17:42:10 +0200 |
| parents | b286222158be |
| children | cf200271439a |
comparison
equal
deleted
inserted
replaced
| 693:32b0d19e8aba | 694:7efabe0cddcf |
|---|---|
| 418 // not known at the time of baseRevision: | 418 // not known at the time of baseRevision: |
| 419 // normal, added, merged: either added or copied since base revision. | 419 // normal, added, merged: either added or copied since base revision. |
| 420 // removed: nothing to report, | 420 // removed: nothing to report, |
| 421 if (ds.checkNormal(fname) != null || ds.checkMerged(fname) != null) { | 421 if (ds.checkNormal(fname) != null || ds.checkMerged(fname) != null) { |
| 422 try { | 422 try { |
| 423 // FIXME refactor, done numerous time e.g. in TestStatus#testStatusCommand with base = 3 | 423 // XXX perhaps, shall take second parent into account if not null, too? |
| 424 ArrayList<Nodeid> parents = new ArrayList<Nodeid>(2); | 424 Nodeid nidFromDirstate = getDirstateParentManifest().nodeid(fname); |
| 425 parents.add(ds.parents().first()); | 425 if (nidFromDirstate != null) { |
| 426 parents.add(ds.parents().second()); | |
| 427 parents.remove(Nodeid.NULL); | |
| 428 // try either parent if file came through one of them, or both | |
| 429 for (Nodeid parent : parents) { | |
| 430 int csetIndex = repo.getChangelog().getRevisionIndex(parent); | |
| 431 Nodeid fileRev = repo.getManifest().getFileRevision(csetIndex, fname); | |
| 432 if (fileRev == null) { | |
| 433 continue; | |
| 434 } | |
| 435 // see if file revision known in this parent got copied from one of baseRevNames | 426 // see if file revision known in this parent got copied from one of baseRevNames |
| 436 Path origin = HgStatusCollector.getOriginIfCopy(repo, fname, fileRev, collect.files(), baseRevision); | 427 Path origin = HgStatusCollector.getOriginIfCopy(repo, fname, nidFromDirstate, collect.files(), baseRevision); |
| 437 if (origin != null) { | 428 if (origin != null) { |
| 438 inspector.copied(getPathPool().mangle(origin), fname); | 429 inspector.copied(getPathPool().mangle(origin), fname); |
| 439 return; | 430 return; |
| 440 } | 431 } |
| 441 } | 432 } |
