tests/test-log-exthook.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 09 Apr 2024 02:54:19 +0200
changeset 51586 1cef1412af3e
parent 48876 42d2b31cee0b
permissions -rw-r--r--
phases: rework the logic of _pushdiscoveryphase to bound complexity This rework the various graph traversal in _pushdiscoveryphase to keep the complexity in check. This is done though a couple of things: - first, limiting the space we have to explore, for example, if we are not in publishing push, we don't need to consider remote draft roots that are also draft locally, as there is nothing to be moved there. - avoid unbounded descendant computation, and use the faster "rev between" computation. This provide a massive boost to performance when exchanging with repository with a massive amount of draft, like mozilla-try: ### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog # benchmark.name = hg.command.push # bin-env-vars.hg.flavor = default # bin-env-vars.hg.py-re2-module = default # benchmark.variants.explicit-rev = all-out-heads # benchmark.variants.issue6528 = disabled # benchmark.variants.protocol = ssh # benchmark.variants.reuse-external-delta-parent = default ## benchmark.variants.revs = any-1-extra-rev before: 20.346590 seconds after: 11.232059 seconds (-38.15%, -7.48 seconds) ## benchmark.variants.revs = any-100-extra-rev before: 24.752051 seconds after: 15.367412 seconds (-37.91%, -9.38 seconds) After this changes, the push operation is still quite too slow. Some of this can be attributed to general phases slowness (reading all the roots from disk for example) and other know slowness (not using persistent-nodemap, branchmap, tags, etc. We are also working on them, but with this series, phase discovery during push no longer showing up in profile and this is a pretty nice and bit low-hanging fruit out of the way. ### (same case as the above) # benchmark.variants.revs = any-1-extra-rev pre-%ln-change: 44.235070 this-changeset: 11.232059 seconds (-74.61%, -33.00 seconds) # benchmark.variants.revs = any-100-extra-rev pre-%ln-change: 49.234697 this-changeset: 15.367412 seconds (-68.79%, -33.87 seconds) Note that with this change, the `hg push` performance is now much closer to the `hg pull` performance, even it still lagging behind a bit. (and the overall performance are still too slow). ### data-env-vars.name = mozilla-try-2023-03-22-ds2-pnm # benchmark.variants.explicit-rev = all-out-heads # benchmark.variants.issue6528 = disabled # benchmark.variants.protocol = ssh # benchmark.variants.pulled-delta-reuse-policy = default # bin-env-vars.hg.flavor = rust ## benchmark.variants.revs = any-1-extra-rev hg.command.pull: 6.517450 hg.command.push: 11.219888 ## benchmark.variants.revs = any-100-extra-rev hg.command.pull: 10.160991 hg.command.push: 14.251107 ### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog # bin-env-vars.hg.py-re2-module = default # benchmark.variants.explicit-rev = all-out-heads # benchmark.variants.issue6528 = disabled # benchmark.variants.protocol = ssh # benchmark.variants.pulled-delta-reuse-policy = default ## bin-env-vars.hg.flavor = default ## benchmark.variants.revs = any-1-extra-rev hg.command.pull: 8.577772 hg.command.push: 11.232059 ## bin-env-vars.hg.flavor = default ## benchmark.variants.revs = any-100-extra-rev hg.command.pull: 13.152976 hg.command.push: 15.367412 ## bin-env-vars.hg.flavor = rust ## benchmark.variants.revs = any-1-extra-rev hg.command.pull: 8.731982 hg.command.push: 11.178751 ## bin-env-vars.hg.flavor = rust ## benchmark.variants.revs = any-100-extra-rev hg.command.pull: 13.184236 hg.command.push: 15.620843
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33154
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     1
Test hg log changeset printer external hook
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     2
-------------------------------------------
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     3
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     4
  $ cat > $TESTTMP/logexthook.py <<EOF
39657
2b9f315a4217 py3: use codecs.encode() to encode in rot-13 encoding
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 35888
diff changeset
     5
  > import codecs
33964
bfafd189edd9 tests: update test-log-exthook to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 33154
diff changeset
     6
  > from mercurial import (
bfafd189edd9 tests: update test-log-exthook to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 33154
diff changeset
     7
  >   commands,
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 33964
diff changeset
     8
  >   logcmdutil,
33964
bfafd189edd9 tests: update test-log-exthook to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 33154
diff changeset
     9
  >   repair,
bfafd189edd9 tests: update test-log-exthook to pass our import checker
Augie Fackler <raf@durin42.com>
parents: 33154
diff changeset
    10
  > )
40441
005bc856e919 py3: port test-log-exthook.t to Python 3
Augie Fackler <augie@google.com>
parents: 39657
diff changeset
    11
  > def brot13(b):
005bc856e919 py3: port test-log-exthook.t to Python 3
Augie Fackler <augie@google.com>
parents: 39657
diff changeset
    12
  >     return codecs.encode(b.decode('utf8'), 'rot-13').encode('utf8')
33154
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    13
  > def rot13description(self, ctx):
40441
005bc856e919 py3: port test-log-exthook.t to Python 3
Augie Fackler <augie@google.com>
parents: 39657
diff changeset
    14
  >     description = ctx.description().strip().splitlines()[0]
005bc856e919 py3: port test-log-exthook.t to Python 3
Augie Fackler <augie@google.com>
parents: 39657
diff changeset
    15
  >     self.ui.write(b"%s:     %s\n" % (brot13(b"summary"),
005bc856e919 py3: port test-log-exthook.t to Python 3
Augie Fackler <augie@google.com>
parents: 39657
diff changeset
    16
  >                                      brot13(description)))
33154
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    17
  > def reposetup(ui, repo):
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 33964
diff changeset
    18
  >     logcmdutil.changesetprinter._exthook = rot13description
33154
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    19
  > EOF
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    20
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    21
Prepare the repository
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    22
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    23
  $ hg init empty
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    24
  $ cd empty
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    25
  $ touch ROOT
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    26
  $ hg commit -A -m "Root" ROOT
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    27
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    28
  $ touch a b c
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    29
  $ hg commit -A -m "Add A, B, C" a b c
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    30
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    31
Check the log
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    32
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    33
  $ hg log --config extensions.t=$TESTTMP/logexthook.py
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    34
  changeset:   1:70fc82b23320
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    35
  tag:         tip
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    36
  user:        test
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    37
  date:        Thu Jan 01 00:00:00 1970 +0000
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    38
  fhzznel:     Nqq N, O, P
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    39
  summary:     Add A, B, C
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    40
  
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    41
  changeset:   0:b00443a54871
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    42
  user:        test
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    43
  date:        Thu Jan 01 00:00:00 1970 +0000
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    44
  fhzznel:     Ebbg
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    45
  summary:     Root
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    46
  
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    47
Check that exthook is working with graph log too
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    48
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    49
  $ hg log -G --config extensions.t=$TESTTMP/logexthook.py
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    50
  @  changeset:   1:70fc82b23320
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    51
  |  tag:         tip
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    52
  |  user:        test
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    53
  |  date:        Thu Jan 01 00:00:00 1970 +0000
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    54
  |  fhzznel:     Nqq N, O, P
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    55
  |  summary:     Add A, B, C
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    56
  |
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    57
  o  changeset:   0:b00443a54871
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    58
     user:        test
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    59
     date:        Thu Jan 01 00:00:00 1970 +0000
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    60
     fhzznel:     Ebbg
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    61
     summary:     Root
4ecc6047d45f log: add an extension hook-point in changeset_printer
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    62