mercurial/stack.py
author Arseniy Alekseyev <aalekseyev@janestreet.com>
Wed, 31 May 2023 10:37:55 +0100
changeset 50672 3b56395404a1
parent 48875 6000f5b25c9b
child 51863 f4733654f144
permissions -rw-r--r--
stream-clone: avoid opening a revlog in case we do not need it Opening an revlog has a cost, especially if it is inline as we have to scan the file and construct an index. To prevent the associated slowdown, we just do a minimal scan to check that an inline file is still inline, and simply stream the file without creating a revlog when we can. This provides a big boost compared to the previous changeset, even if the full generation is still penalized by the initial gathering of information. All benchmarks are run on linux with Python 3.10.7. # benchmark.name = hg.exchange.stream.generate # benchmark.variants.version = v2 ### Compared to the previous changesets We get a large win all across the board! # mercurial-2018-08-01-zstd-sparse-revlog before: 0.250694 seconds after: 0.105986 seconds (-57.72%) # pypy-2018-08-01-zstd-sparse-revlog before: 3.885657 seconds after: 1.709748 seconds (-56.00%) # netbeans-2018-08-01-zstd-sparse-revlog before: 16.679371 seconds after: 7.687469 seconds (-53.91%) # mozilla-central-2018-08-01-zstd-sparse-revlog before: 38.575482 seconds after: 17.520316 seconds (-54.58%) # mozilla-try-2019-02-18-zstd-sparse-revlog before: 81.160994 seconds after: 37.073753 seconds (-54.32%) ### Compared to 6.4.3 We are still significantly slower than 6.4.3, the extra time is usually twice slower than the extra time we observe on the locked section, which is a quite interesting information. Except for mercurial-central that is much faster. That discrepancy is not really explained yet. # mercurial-2018-08-01-zstd-sparse-revlog 6.4.3: 0.072560 seconds after: 0.105986 seconds (+46.07%) (- 0.03 seconds) # pypy-2018-08-01-zstd-sparse-revlog 6.4.3: 1.211193 seconds after: 1.709748 seconds (+41.16%) (-0.45 seconds) # netbeans-2018-08-01-zstd-sparse-revlog 6.4.3: 4.932843 seconds after: 7.687469 seconds (+55.84%) (-2.75 seconds) # mozilla-central-2018-08-01-zstd-sparse-revlog 6.4.3: 34.012226 seconds after: 17.520316 seconds (-48.49%) (-16.49 seconds) # mozilla-try-2019-02-18-zstd-sparse-revlog 6.4.3: 23.850555 seconds after: 37.073753 seconds (+55.44%) (+13.22 seconds)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37000
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     1
# stack.py - Mercurial functions for stack definition
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     2
#
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 43077
diff changeset
     3
#  Copyright Olivia Mackall <olivia@selenic.com> and other
37000
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     4
#
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     5
# This software may be used and distributed according to the terms of the
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     6
# GNU General Public License version 2 or any later version.
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     7
43075
57875cf423c9 style: run a patched black on a subset of mercurial
Augie Fackler <augie@google.com>
parents: 42960
diff changeset
     8
37000
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
     9
def getstack(repo, rev=None):
37004
68fcc5503ec5 stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents: 37000
diff changeset
    10
    """return a sorted smartrev of the stack containing either rev if it is
68fcc5503ec5 stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents: 37000
diff changeset
    11
    not None or the current working directory parent.
37000
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    12
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    13
    The stack will always contain all drafts changesets which are ancestors to
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    14
    the revision and are not merges.
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    15
    """
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    16
    if rev is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43075
diff changeset
    17
        rev = b'.'
37000
40583c7afd63 stack: add a new module for stack-related commands
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
    18
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43075
diff changeset
    19
    revspec = b'only(%s) and not public() and not ::merge()'
42960
763028fc6a69 stack: use repo.revs() instead of revsetlang.formatspec() + scmutil.revrange()
Anton Shestakov <av6@dwimlabs.net>
parents: 42698
diff changeset
    20
    revisions = repo.revs(revspec, rev)
37004
68fcc5503ec5 stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents: 37000
diff changeset
    21
    revisions.sort()
68fcc5503ec5 stack: return a sorted smartrev by default
Boris Feld <boris.feld@octobus.net>
parents: 37000
diff changeset
    22
    return revisions