Mercurial > hg
view contrib/check-pytype.sh @ 51977:42a116f1cdc1
branchmap-v3: introduce a "stop_rev" argument to `headsrevs`
The `headsrevs` method of the revlog already have a `revs` argument to compute
the headrevs of a limited set of heads. However, it disable the use of the
native compiled code to compute the heads, which slows down the branchmap v3
code a lot.
The branchmap v3 usage is actually quite constrained as we will always only
ignores a part at the top of the graph. So we could be significantly faster.
We start by making small change to the python side to improve the situation and
introduce the new API. More collaboration with the native code are coming later.
This massively speedup operation and close most of the remaining gaps between
branchmap-v3 and branchmap-v2. especially on repository with many revs like
mozilla-try. A small overhead remains mostly because the `headrevs` logic
currently has some inefficiently. We will look into them from there.
### benchmark.name = hg.command.unbundle
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.issue6528 = disabled
# benchmark.variants.resource-usage = default
# benchmark.variants.reuse-external-delta-parent = yes
# benchmark.variants.revs = any-1-extra-rev
# benchmark.variants.source = unbundle
# benchmark.variants.validate = default
# benchmark.variants.verbosity = quiet
## data-env-vars.name = netbeans-2018-08-01-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 0.233711 ~~~~~
branch-v3 before: 0.368769 (+57.79%, +0.14)
branch-v3 after: 0.239857 (+2.63%, +0.01)
# bin-env-vars.hg.flavor = rust
branch-v2: 0.235230 ~~~~~
branch-v3 before: 0.372460 (+58.34%, +0.14)
branch-v3 after: 0.240972 (+2.44%, +0.01)
## data-env-vars.name = netbeans-2018-08-01-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 0.255586 ~~~~~
branch-v3 before: 0.318907 (+24.78%, +0.06)
branch-v3 after: 0.268560 (+5.08%, +0.01)
## data-env-vars.name = mozilla-central-2024-03-22-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 0.339010 ~~~~~
branch-v3 before: 0.349752 (+3.17%, +0.01)
branch-v3 after: 0.349389 (+3.06%, +0.01)
# bin-env-vars.hg.flavor = rust
branch-v2: 0.346525 ~~~~~
branch-v3 before: 0.354300 (+2.24%, +0.01)
branch-v3 after: 0.355661 (+2.64%, +0.01)
## data-env-vars.name = mozilla-central-2024-03-22-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 0.380202 ~~~~~
branch-v3 before: 0.396293 (+4.23%, +0.02)
branch-v3 after: 0.408851 (+7.54%, +0.03)
## data-env-vars.name = mozilla-unified-2024-03-22-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 0.412165 ~~~~~
branch-v3 before: 0.424769 (+3.06%, +0.01)
branch-v3 after: 0.427782 (+3.79%, +0.02)
# bin-env-vars.hg.flavor = rust
branch-v2: 0.412397 ~~~~~
branch-v3 before: 0.421796 (+2.28%, +0.01)
branch-v3 after: 0.422354 (+2.41%, +0.01)
## data-env-vars.name = mozilla-unified-2024-03-22-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 0.429501 ~~~~~
branch-v3 before: 0.443849 (+3.34%, +0.01)
branch-v3 after: 0.443197 (+3.19%, +0.01)
## data-env-vars.name = mozilla-try-2024-03-26-zstd-sparse-revlog
# bin-env-vars.hg.flavor = default
branch-v2: 3.403171 ~~~~~
branch-v3 before: 6.234055 (+83.18%, +2.83)
branch-v3 after: 3.819477 (+12.23%, +0.42)
# bin-env-vars.hg.flavor = rust
branch-v2: 3.454876 ~~~~~
branch-v3 before: 6.307813 (+82.58%, +2.85)
branch-v3 after: 3.590284 (+3.92%, +0.14)
## data-env-vars.name = mozilla-try-2024-03-26-ds2-pnm
# bin-env-vars.hg.flavor = rust
branch-v2: 3.465435 ~~~~~
branch-v3 before: 5.176076 (+49.36%, +1.71)
branch-v3 after: 3.633278 (+4.84%, +0.17)
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 03 Sep 2024 11:11:17 +0200 |
parents | 51235f6aa067 |
children | ff13068e9b1c |
line wrap: on
line source
#!/bin/sh set -e set -u cd "$(hg root)" printf "pytype version: " pytype --version # Many of the individual files that are excluded here confuse pytype # because they do a mix of Python 2 and Python 3 things # conditionally. There's no good way to help it out with that as far as # I can tell, so let's just hide those files from it for now. We should # endeavor to empty this list out over time, as some of these are # probably hiding real problems. # # hgext/absorb.py # [attribute-error] # hgext/bugzilla.py # [pyi-error], [attribute-error] # hgext/convert/bzr.py # [attribute-error] # hgext/convert/cvs.py # [attribute-error], [wrong-arg-types] # hgext/convert/cvsps.py # [attribute-error] # hgext/convert/p4.py # [wrong-arg-types] (__file: mercurial.utils.procutil._pfile -> IO) # hgext/convert/subversion.py # [attribute-error], [name-error], [pyi-error] # hgext/fastannotate/context.py # no linelog.copyfrom() # hgext/fastannotate/formatter.py # [unsupported-operands] # hgext/fsmonitor/__init__.py # [name-error] # hgext/git/__init__.py # [attribute-error] # hgext/githelp.py # [attribute-error] [wrong-arg-types] # hgext/hgk.py # [attribute-error] # hgext/histedit.py # [attribute-error], [wrong-arg-types] # hgext/keyword.py # [attribute-error] # hgext/largefiles/storefactory.py # [attribute-error] # hgext/lfs/__init__.py # [attribute-error] # hgext/narrow/narrowbundle2.py # [attribute-error] # hgext/narrow/narrowcommands.py # [attribute-error], [name-error] # hgext/rebase.py # [attribute-error] # hgext/remotefilelog/basepack.py # [attribute-error], [wrong-arg-count] # hgext/remotefilelog/basestore.py # [attribute-error] # hgext/remotefilelog/contentstore.py # [missing-parameter], [wrong-keyword-args], [attribute-error] # hgext/remotefilelog/fileserverclient.py # [attribute-error] # hgext/remotefilelog/shallowbundle.py # [attribute-error] # hgext/remotefilelog/remotefilectx.py # [module-attr] (This is an actual bug) # hgext/sqlitestore.py # [attribute-error] # hgext/zeroconf/__init__.py # bytes vs str; tests fail on macOS # # mercurial/context.py # many [attribute-error] # mercurial/crecord.py # tons of [attribute-error], [module-attr] # mercurial/debugcommands.py # [wrong-arg-types] # mercurial/dispatch.py # initstdio: No attribute ... on TextIO [attribute-error] # mercurial/exchange.py # [attribute-error] # mercurial/hgweb/hgweb_mod.py # [attribute-error], [name-error], [wrong-arg-types] # mercurial/hgweb/server.py # [attribute-error], [name-error], [module-attr] # mercurial/hgweb/wsgicgi.py # confused values in os.environ # mercurial/httppeer.py # [attribute-error], [wrong-arg-types] # mercurial/interfaces # No attribute 'capabilities' on peer [attribute-error] # mercurial/keepalive.py # [attribute-error] # mercurial/localrepo.py # [attribute-error] # mercurial/minirst.py # [unsupported-operands], [attribute-error] # mercurial/pure/parsers.py # [attribute-error] # mercurial/repoview.py # [attribute-error] # mercurial/testing/storage.py # tons of [attribute-error] # mercurial/win32.py # [not-callable] # mercurial/wireprotoframing.py # [unsupported-operands], [attribute-error], [import-error] # mercurial/wireprotov1peer.py # [attribute-error] # mercurial/wireprotov1server.py # BUG?: BundleValueError handler accesses subclass's attrs # TODO: use --no-cache on test server? Caching the files locally helps during # development, but may be a hinderance for CI testing. # TODO: include hgext and hgext3rd pytype --keep-going --jobs auto \ doc/check-seclevel.py hgdemandimport hgext mercurial \ -x hgext/absorb.py \ -x hgext/bugzilla.py \ -x hgext/convert/bzr.py \ -x hgext/convert/cvs.py \ -x hgext/convert/cvsps.py \ -x hgext/convert/p4.py \ -x hgext/convert/subversion.py \ -x hgext/fastannotate/context.py \ -x hgext/fastannotate/formatter.py \ -x hgext/fsmonitor/__init__.py \ -x hgext/git/__init__.py \ -x hgext/githelp.py \ -x hgext/hgk.py \ -x hgext/histedit.py \ -x hgext/keyword.py \ -x hgext/largefiles/storefactory.py \ -x hgext/lfs/__init__.py \ -x hgext/narrow/narrowbundle2.py \ -x hgext/narrow/narrowcommands.py \ -x hgext/rebase.py \ -x hgext/remotefilelog/basepack.py \ -x hgext/remotefilelog/basestore.py \ -x hgext/remotefilelog/contentstore.py \ -x hgext/remotefilelog/fileserverclient.py \ -x hgext/remotefilelog/remotefilectx.py \ -x hgext/remotefilelog/shallowbundle.py \ -x hgext/sqlitestore.py \ -x hgext/zeroconf/__init__.py \ -x mercurial/context.py \ -x mercurial/crecord.py \ -x mercurial/debugcommands.py \ -x mercurial/dispatch.py \ -x mercurial/exchange.py \ -x mercurial/hgweb/hgweb_mod.py \ -x mercurial/hgweb/server.py \ -x mercurial/hgweb/wsgicgi.py \ -x mercurial/httppeer.py \ -x mercurial/interfaces \ -x mercurial/keepalive.py \ -x mercurial/localrepo.py \ -x mercurial/minirst.py \ -x mercurial/pure/parsers.py \ -x mercurial/repoview.py \ -x mercurial/testing/storage.py \ -x mercurial/thirdparty \ -x mercurial/win32.py \ -x mercurial/wireprotoframing.py \ -x mercurial/wireprotov1peer.py \ -x mercurial/wireprotov1server.py if find .pytype/pyi -name '*.pyi' | xargs grep -ql '# Caught error'; then echo 'pytype crashed while generating the following type stubs:' find .pytype/pyi -name '*.pyi' | xargs grep -l '# Caught error' | sort fi