Mercurial > hg
view mercurial/scmposix.py @ 52245:d57d1606049c stable
clone: properly exclude rev-branch-cache from post clone cache warming
When adding "CACHE_REV_BRANCH" to "CACHES_ALL" in e51161b12c7e, I did not
expected it to impact the clone steps. However the "CACHES_POST_CLONE" set is
created rather creatively. (we should fix that, but not on stable)
The benchmark caught a quite significant slowdown one hardlink and ssh-stream
clones. Such slow down can be reduced to around ~5% by fully warming the cache
before the clone. However keeping this expensive step away from the clone
operation fully fix the slowdown and preserve the initial intend.
Example slowdow for hardlink clone
### benchmark.name = hg.command.clone
# bin-env-vars.hg.flavor = default
# bin-env-vars.hg.py-re2-module = default
# benchmark.variants.explicit-rev = none
# benchmark.variants.issue6528 = default
# benchmark.variants.protocol = local-hardlink
# benchmark.variants.pulled-delta-reuse-policy = default
# benchmark.variants.resource-usage = default
# benchmark.variants.validate = default
## data-env-vars.name = netbeans-2018-08-01-zstd-sparse-revlog
6.8.2: 19.799752
6.9rc0: 29.017493 (+46.55%, +9.22)
after: 19.929341
## data-env-vars.name = mercurial-public-2018-08-01-zstd-sparse-revlog
6.8.2: 0.468020
6.9rc0: 1.701294 (+263.51%, +1.23)
after: 0.471934
## data-env-vars.name = pypy-2024-03-22-zstd-sparse-revlog
6.8.2: 2.397564
6.9rc0: 5.666641 (+137.41%, +3.28)
after: 2.428085
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 13 Nov 2024 13:33:36 +0100 |
parents | f4733654f144 |
children |
line wrap: on
line source
from __future__ import annotations import array import errno import fcntl import os import sys import typing from typing import ( List, Tuple, ) from . import ( encoding, pycompat, util, ) if typing.TYPE_CHECKING: from . import ui as uimod # BSD 'more' escapes ANSI color sequences by default. This can be disabled by # $MORE variable, but there's no compatible option with Linux 'more'. Given # OS X is widely used and most modern Unix systems would have 'less', setting # 'less' as the default seems reasonable. fallbackpager = b'less' def _rcfiles(path: bytes) -> List[bytes]: rcs = [os.path.join(path, b'hgrc')] rcdir = os.path.join(path, b'hgrc.d') try: rcs.extend( [ os.path.join(rcdir, f) for f, kind in sorted(util.listdir(rcdir)) if f.endswith(b".rc") ] ) except OSError: pass return rcs def systemrcpath() -> List[bytes]: path = [] if pycompat.sysplatform == b'plan9': root = b'lib/mercurial' else: root = b'etc/mercurial' # old mod_python does not set sys.argv if len(getattr(sys, 'argv', [])) > 0: p = os.path.dirname(os.path.dirname(pycompat.sysargv[0])) if p != b'/': path.extend(_rcfiles(os.path.join(p, root))) path.extend(_rcfiles(b'/' + root)) return path def userrcpath() -> List[bytes]: if pycompat.sysplatform == b'plan9': return [encoding.environ[b'home'] + b'/lib/hgrc'] else: confighome = encoding.environ.get(b'XDG_CONFIG_HOME') if confighome is None or not os.path.isabs(confighome): confighome = os.path.expanduser(b'~/.config') return [ os.path.expanduser(b'~/.hgrc'), os.path.join(confighome, b'hg', b'hgrc'), ] def termsize(ui: "uimod.ui") -> Tuple[int, int]: try: import termios TIOCGWINSZ = termios.TIOCGWINSZ # unavailable on IRIX (issue3449) except (AttributeError, ImportError): return 80, 24 for dev in (ui.ferr, ui.fout, ui.fin): try: try: fd = dev.fileno() except AttributeError: continue if not os.isatty(fd): continue arri = fcntl.ioctl(fd, TIOCGWINSZ, b'\0' * 8) height, width = array.array('h', arri)[:2] if width > 0 and height > 0: return width, height except ValueError: pass except IOError as e: if e.errno == errno.EINVAL: pass else: raise return 80, 24