D4875: treemanifests: remove _loadalllazy when doing copies

spectral (Kyle Lippincott) phabricator at mercurial-scm.org
Wed Oct 3 22:22:49 UTC 2018


spectral created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  'before' here is https://phab.mercurial-scm.org/D4845 (not the committed/rebased
  version)
  
    diff --git:
    repo  | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
    ------+---+---+------------------------+-----------------------+------------
    m-u   |   |   | 1.329 s +-  0.011 s    | 1.320 s +-  0.010 s   |  99.3%
    m-u   |   | x | 1.316 s +-  0.005 s    | 1.334 s +-  0.018 s   | 101.4%
    m-u   | x |   | 1.330 s +-  0.021 s    | 1.322 s +-  0.005 s   |  99.4%
    m-u   | x | x | 87.2 ms +-   0.7 ms    | 86.9 ms +-   1.5 ms   |  99.7%
    l-d-r |   |   | 203.3 ms +-   7.8 ms   | 199.4 ms +-   1.8 ms  |  98.1%
    l-d-r |   | x | 204.6 ms +-   2.8 ms   | 201.7 ms +-   2.1 ms  |  98.6%
    l-d-r | x |   | 90.5 ms +-  11.0 ms    | 86.2 ms +-   1.0 ms   |  95.2%
    l-d-r | x | x | 66.3 ms +-   2.0 ms    | 66.4 ms +-   0.9 ms   | 100.2%
    
    diff -c . --git:
    repo  | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
    ------+---+---+------------------------+-----------------------+------------
    m-u   |   |   | 239.4 ms +-   2.0 ms   | 241.7 ms +-   4.6 ms  | 101.0%
    m-u   |   | x | 128.9 ms +-   1.9 ms   | 130.9 ms +-   7.7 ms  | 101.6%
    m-u   | x |   | 241.1 ms +-   1.6 ms   | 240.1 ms +-   1.4 ms  |  99.6%
    m-u   | x | x | 133.4 ms +-   1.5 ms   | 133.4 ms +-   1.2 ms  | 100.0%
    l-d-r |   |   | 84.3 ms +-   1.5 ms    | 83.5 ms +-   1.0 ms   |  99.1%
    l-d-r |   | x | 200.9 ms +-   6.3 ms   | 203.0 ms +-   4.4 ms  | 101.0%
    l-d-r | x |   | 108.1 ms +-   1.4 ms   | 108.7 ms +-   2.1 ms  | 100.6%
    l-d-r | x | x | 190.2 ms +-   4.8 ms   | 191.6 ms +-   2.0 ms  | 100.7%
    
    rebase -r . --keep -d .^^:
    repo  | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
    ------+---+---+------------------------+-----------------------+------------
    m-u   |   |   | 5.655 s +-  0.029 s    | 5.640 s +-  0.036 s   |  99.7%
    m-u   |   | x | 5.813 s +-  0.038 s    | 5.773 s +-  0.028 s   |  99.3%
    m-u   | x |   | 5.593 s +-  0.043 s    | 5.589 s +-  0.028 s   |  99.9%
    m-u   | x | x | 648.2 ms +-  19.2 ms   | 637.3 ms +-  27.7 ms  |  98.3%
    l-d-r |   |   | 673.3 ms +-   8.0 ms   | 673.2 ms +-   6.8 ms  | 100.0%
    l-d-r |   | x | 6.583 s +-  0.030 s    | 5.721 s +-  0.028 s   |  86.9% <--
    l-d-r | x |   | 277.8 ms +-   6.7 ms   | 276.0 ms +-   2.7 ms  |  99.4%
    l-d-r | x | x | 1.692 s +-  0.013 s    | 720.9 ms +-  13.3 ms  |  42.6% <--
    
    status --change . --copies:
    repo  | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
    ------+---+---+------------------------+-----------------------+------------
    m-u   |   |   | 220.9 ms +-   1.6 ms   | 219.9 ms +-   2.2 ms  |  99.5%
    m-u   |   | x | 109.2 ms +-   1.0 ms   | 109.4 ms +-   0.8 ms  | 100.2%
    m-u   | x |   | 222.6 ms +-   1.7 ms   | 221.4 ms +-   2.1 ms  |  99.5%
    m-u   | x | x | 113.4 ms +-   0.5 ms   | 113.1 ms +-   1.1 ms  |  99.7%
    l-d-r |   |   | 82.1 ms +-   1.7 ms    | 82.1 ms +-   1.2 ms   | 100.0%
    l-d-r |   | x | 199.8 ms +-   4.0 ms   | 200.7 ms +-   3.6 ms  | 100.5%
    l-d-r | x |   | 85.4 ms +-   1.5 ms    | 85.2 ms +-   0.3 ms   |  99.8%
    l-d-r | x | x | 202.6 ms +-   4.4 ms   | 208.0 ms +-   4.0 ms  | 102.7%
    
    status --copies:
    repo  | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
    ------+---+---+------------------------+-----------------------+------------
    m-u   |   |   | 1.941 s +-  0.014 s    | 1.930 s +-  0.009 s   |  99.4%
    m-u   |   | x | 1.924 s +-  0.007 s    | 1.950 s +-  0.010 s   | 101.4%
    m-u   | x |   | 1.959 s +-  0.085 s    | 1.926 s +-  0.009 s   |  98.3%
    m-u   | x | x | 96.2 ms +-   1.0 ms    | 96.4 ms +-   0.7 ms   | 100.2%
    l-d-r |   |   | 604.4 ms +-  10.6 ms   | 602.6 ms +-   7.1 ms  |  99.7%
    l-d-r |   | x | 605.7 ms +-   4.1 ms   | 607.4 ms +-   6.1 ms  | 100.3%
    l-d-r | x |   | 182.4 ms +-   1.2 ms   | 183.4 ms +-   1.2 ms  | 100.5%
    l-d-r | x | x | 150.8 ms +-   2.0 ms   | 150.6 ms +-   1.0 ms  |  99.9%
    
    update $rev^; ~/src/hg/hg{hg}/hg update $rev:
    repo  | N | T | before (mean +- stdev) | after (mean +- stdev) | % of before
    ------+---+---+------------------------+-----------------------+------------
    m-u   |   |   | 3.185 s +-  0.027 s    | 3.181 s +-  0.017 s   |  99.9%
    m-u   |   | x | 3.028 s +-  0.021 s    | 2.954 s +-  0.010 s   |  97.6%
    m-u   | x |   | 3.168 s +-  0.010 s    | 3.175 s +-  0.023 s   | 100.2%
    m-u   | x | x | 317.5 ms +-   3.5 ms   | 313.2 ms +-   2.9 ms  |  98.6%
    l-d-r |   |   | 456.2 ms +-  10.6 ms   | 454.4 ms +-   5.8 ms  |  99.6%
    l-d-r |   | x | 9.236 s +-  0.063 s    | 757.9 ms +-   9.2 ms  |   8.2% <--
    l-d-r | x |   | 257.6 ms +-   2.3 ms   | 261.2 ms +-   1.7 ms  | 101.4%
    l-d-r | x | x | 1.614 s +-  0.013 s    | 478.0 ms +-  14.3 ms  |  29.6% <--

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D4875

AFFECTED FILES
  mercurial/manifest.py

CHANGE DETAILS

diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -957,9 +957,8 @@
         if self._copyfunc is _noop:
             def _copyfunc(s):
                 self._load()
-                # OPT: it'd be nice to not load everything here. Unfortunately
-                # this makes a mess of the "dirty" state tracking if we don't.
-                self._loadalllazy()
+                s._lazydirs = {d: (p, n, r, True) for
+                               d, (p, n, r, c) in self._lazydirs.iteritems()}
                 sdirs = s._dirs
                 for d, v in self._dirs.iteritems():
                     sdirs[d] = v.copy()
@@ -1228,11 +1227,9 @@
                 return ld[1]
             return m._dirs.get(d, emptytree)._node
 
-        # we should have always loaded everything by the time we get here for
-        # `self`, but possibly not in `m1` or `m2`.
-        assert not self._lazydirs
         # let's skip investigating things that `match` says we do not need.
         visit = match.visitchildrenset(self._dir[:-1] or '.')
+        visit = self._loadchildrensetlazy(visit)
         if visit == 'this' or visit == 'all':
             visit = None
         for d, subm in self._dirs.iteritems():



To: spectral, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list