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 } |