##// END OF EJS Templates
rust-dirstatemap: cache non normal and other parent set...
rust-dirstatemap: cache non normal and other parent set Performance of `hg update` was significantly worse since the introduction of the Rust `dirstatemap`. This regression was noticed by Valentin Gatien-Baron when working on a large repository, as it goes unnoticed for smaller repositories like Mercurial itself. This fix introduces the same getter/setter mechanism at `hg-core` level as for `set/get_dirs`. While this technique is, as previously discussed, quite suboptimal, it fixes an important enough problem. Refactoring `hg-core` to use the typestate pattern could be a good approach to improving code quality in a future patch. Differential Revision: https://phab.mercurial-scm.org/D8048

File last commit:

r44770:cd8f248f default
r44775:83b2b829 default
Show More
pyoxidizer.bzl
58 lines | 1.5 KiB | text/x-python | PythonLexer
# Instructions:
#
# 1. cargo install --version 0.5.0 pyoxidizer
# 2. cd /path/to/hg
# 3. pyoxidizer build --path contrib/packaging [--release]
# 4. Run build/pyoxidizer/<arch>/<debug|release>/app/hg
#
# If you need to build again, you need to remove the build/lib.* and
# build/temp.* directories, otherwise PyOxidizer fails to pick up C
# extensions. This is a bug in PyOxidizer.
ROOT = CWD + "/../.."
set_build_path(ROOT + "/build/pyoxidizer")
def make_exe():
dist = default_python_distribution()
code = "import hgdemandimport; hgdemandimport.enable(); from mercurial import dispatch; dispatch.run()"
config = PythonInterpreterConfig(
raw_allocator = "system",
run_eval = code,
# We need this to make resourceutil happy, since it looks for sys.frozen.
sys_frozen = True,
legacy_windows_stdio = True,
)
exe = dist.to_python_executable(
name = "hg",
config = config,
)
# Use setup.py install to build Mercurial and collect Python resources to
# embed in the executable.
resources = dist.setup_py_install(ROOT)
exe.add_python_resources(resources)
return exe
def make_install(exe):
m = FileManifest()
# `hg` goes in root directory.
m.add_python_resource(".", exe)
templates = glob(
include=[ROOT + "/mercurial/templates/**/*"],
strip_prefix = ROOT + "/mercurial/",
)
m.add_manifest(templates)
return m
register_target("exe", make_exe)
register_target("app", make_install, depends = ["exe"], default = True)
resolve_targets()