# HG changeset patch # User Martin von Zweigbergk # Date 1644985486 28800 # Node ID 6cfa30681a1db469e07b083b3b26da824442d2b4 # Parent b70c9697ab415636c06e9201ea526cba626bd3a8# Parent a1538c05d855d4752ddbf38466dd66026971319c branching: merge with stable diff -r b70c9697ab41 -r 6cfa30681a1d Makefile --- a/Makefile Fri Feb 11 16:52:48 2022 -0800 +++ b/Makefile Tue Feb 15 20:24:46 2022 -0800 @@ -204,11 +204,11 @@ # Packaging targets packaging_targets := \ - centos7 \ - centos8 \ + rhel7 \ + rhel8 \ deb \ - docker-centos7 \ - docker-centos8 \ + docker-rhel7 \ + docker-rhel8 \ docker-debian-bullseye \ docker-debian-buster \ docker-debian-stretch \ diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/Makefile --- a/contrib/packaging/Makefile Fri Feb 11 16:52:48 2022 -0800 +++ b/contrib/packaging/Makefile Tue Feb 15 20:24:46 2022 -0800 @@ -13,20 +13,20 @@ FEDORA_RELEASE := 31 -CENTOS_RELEASES := \ +RHEL_RELEASES := \ 7 \ 8 -# Build a Python for these CentOS releases. -CENTOS_WITH_PYTHON_RELEASES := -CENTOS_WITH_NONVERSIONED_PYTHON := -CENTOS_WITH_36_DOCUTILS := 7 +# Build a Python for these RHEL (and derivatives) releases. +RHEL_WITH_PYTHON_RELEASES := +RHEL_WITH_NONVERSIONED_PYTHON := +RHEL_WITH_36_DOCUTILS := 7 help: @echo 'Packaging Make Targets' @echo '' - @echo 'docker-centos{$(strip $(CENTOS_RELEASES))}' - @echo ' Build an RPM for a specific CentOS version using Docker.' + @echo 'docker-rhel{$(strip $(RHEL_RELEASES))}' + @echo ' Build an RPM for a specific RHEL/derivative version using Docker.' @echo '' @echo 'docker-debian-{$(strip $(DEBIAN_CODENAMES))}' @echo ' Build Debian packages specific to a Debian distro using Docker.' @@ -53,8 +53,8 @@ @echo 'ppa' @echo ' Build a Debian source package locally targeting the current system' @echo '' - @echo 'centos{$(strip $(CENTOS_RELEASES))}' - @echo ' Build an RPM for a specific CentOS version locally' + @echo 'rhel{$(strip $(RHEL_RELEASES))}' + @echo ' Build an RPM for a specific RHEL/derivative version locally' @echo '' @echo 'fedora' @echo ' Build an RPM for Fedora $(FEDORA_RELEASE) locally' @@ -106,22 +106,22 @@ docker-fedora: ./dockerrpm fedora$(FEDORA_RELEASE) -# CentOS targets. -define centos_targets -.PHONY: centos$(1) -centos$(1): - mkdir -p $$(HGROOT)/packages/centos$(1) - ./buildrpm $$(if $$(filter $(1),$$(CENTOS_WITH_PYTHON_RELEASES)),--withpython,$$(if $$(filter $(1),$$(CENTOS_WITH_NONVERSIONED_PYTHON)),--python python,))$$(if $$(filter $(1),$$(CENTOS_WITH_36_DOCUTILS)), --docutilspackage python36-docutils,) - cp $$(HGROOT)/contrib/packaging/rpmbuild/RPMS/*/* $$(HGROOT)/packages/centos$(1) - cp $$(HGROOT)/contrib/packaging/rpmbuild/SRPMS/* $$(HGROOT)/packages/centos$(1) +# RHEL targets. +define rhel_targets +.PHONY: rhel$(1) +rhel$(1): + mkdir -p $$(HGROOT)/packages/rhel$(1) + ./buildrpm $$(if $$(filter $(1),$$(RHEL_WITH_PYTHON_RELEASES)),--withpython,$$(if $$(filter $(1),$$(RHEL_WITH_NONVERSIONED_PYTHON)),--python python,))$$(if $$(filter $(1),$$(RHEL_WITH_36_DOCUTILS)), --docutilspackage python36-docutils,) + cp $$(HGROOT)/contrib/packaging/rpmbuild/RPMS/*/* $$(HGROOT)/packages/rhel$(1) + cp $$(HGROOT)/contrib/packaging/rpmbuild/SRPMS/* $$(HGROOT)/packages/rhel$(1) -.PHONY: docker-centos$(1) -docker-centos$(1): - ./dockerrpm centos$(1) $$(if $$(filter $(1),$$(CENTOS_WITH_PYTHON_RELEASES)),--withpython,$$(if $$(filter $(1),$$(CENTOS_WITH_NONVERSIONED_PYTHON)),--python python,))$$(if $$(filter $(1),$$(CENTOS_WITH_36_DOCUTILS)), --docutilspackage python36-docutils,) +.PHONY: docker-rhel$(1) +docker-rhel$(1): + ./dockerrpm rhel$(1) $$(if $$(filter $(1),$$(RHEL_WITH_PYTHON_RELEASES)),--withpython,$$(if $$(filter $(1),$$(RHEL_WITH_NONVERSIONED_PYTHON)),--python python,))$$(if $$(filter $(1),$$(RHEL_WITH_36_DOCUTILS)), --docutilspackage python36-docutils,) endef -$(foreach release,$(CENTOS_RELEASES),$(eval $(call centos_targets,$(release)))) +$(foreach release,$(RHEL_RELEASES),$(eval $(call rhel_targets,$(release)))) .PHONY: linux-wheels linux-wheels: linux-wheels-x86_64 linux-wheels-i686 diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/debian/copyright --- a/contrib/packaging/debian/copyright Fri Feb 11 16:52:48 2022 -0800 +++ b/contrib/packaging/debian/copyright Tue Feb 15 20:24:46 2022 -0800 @@ -3,7 +3,7 @@ Source: https://www.mercurial-scm.org/ Files: * -Copyright: 2005-2021, Olivia Mackall and others. +Copyright: 2005-2022, Olivia Mackall and others. License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/docker/centos7 --- a/contrib/packaging/docker/centos7 Fri Feb 11 16:52:48 2022 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -FROM centos:centos7 - -RUN groupadd -g %GID% build && \ - useradd -u %UID% -g %GID% -s /bin/bash -d /build -m build - -RUN yum install -y epel-release -RUN yum install -y \ - gcc \ - gettext \ - make \ - python3-devel \ - python36-docutils \ - rpm-build \ - tar - -# For creating repo meta data -RUN yum install -y createrepo - -# For rust extensions -RUN yum install -y cargo diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/docker/centos8 --- a/contrib/packaging/docker/centos8 Fri Feb 11 16:52:48 2022 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -FROM centos:centos8 - -RUN groupadd -g %GID% build && \ - useradd -u %UID% -g %GID% -s /bin/bash -d /build -m build - -RUN yum install -y \ - gcc \ - gettext \ - make \ - python3-devel \ - python3-docutils \ - rpm-build - -# For creating repo meta data -RUN yum install -y createrepo - -# For rust extensions -RUN yum install -y cargo diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/docker/rhel7 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/packaging/docker/rhel7 Tue Feb 15 20:24:46 2022 -0800 @@ -0,0 +1,20 @@ +FROM centos:centos7 + +RUN groupadd -g %GID% build && \ + useradd -u %UID% -g %GID% -s /bin/bash -d /build -m build + +RUN yum install -y epel-release +RUN yum install -y \ + gcc \ + gettext \ + make \ + python3-devel \ + python36-docutils \ + rpm-build \ + tar + +# For creating repo meta data +RUN yum install -y createrepo + +# For rust extensions +RUN yum install -y cargo diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/docker/rhel8 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/packaging/docker/rhel8 Tue Feb 15 20:24:46 2022 -0800 @@ -0,0 +1,18 @@ +FROM rockylinux/rockylinux:8 + +RUN groupadd -g %GID% build && \ + useradd -u %UID% -g %GID% -s /bin/bash -d /build -m build + +RUN yum install -y \ + gcc \ + gettext \ + make \ + python3-devel \ + python3-docutils \ + rpm-build + +# For creating repo meta data +RUN yum install -y createrepo + +# For rust extensions +RUN yum install -y cargo diff -r b70c9697ab41 -r 6cfa30681a1d contrib/packaging/inno/mercurial.iss --- a/contrib/packaging/inno/mercurial.iss Fri Feb 11 16:52:48 2022 -0800 +++ b/contrib/packaging/inno/mercurial.iss Tue Feb 15 20:24:46 2022 -0800 @@ -6,7 +6,7 @@ #endif [Setup] -AppCopyright=Copyright 2005-2021 Olivia Mackall and others +AppCopyright=Copyright 2005-2022 Olivia Mackall and others AppName=Mercurial AppVersion={#VERSION} OutputBaseFilename=Mercurial-{#VERSION}{#SUFFIX} @@ -29,7 +29,7 @@ DefaultDirName={pf}\Mercurial SourceDir=stage VersionInfoDescription=Mercurial distributed SCM (version {#VERSION}) -VersionInfoCopyright=Copyright 2005-2021 Olivia Mackall and others +VersionInfoCopyright=Copyright 2005-2022 Olivia Mackall and others VersionInfoCompany=Olivia Mackall and others VersionInfoVersion={#QUAD_VERSION} InternalCompressLevel=max diff -r b70c9697ab41 -r 6cfa30681a1d contrib/win32/ReadMe.html --- a/contrib/win32/ReadMe.html Fri Feb 11 16:52:48 2022 -0800 +++ b/contrib/win32/ReadMe.html Tue Feb 15 20:24:46 2022 -0800 @@ -140,7 +140,7 @@

- Mercurial is Copyright 2005-2021 Olivia Mackall and others. + Mercurial is Copyright 2005-2022 Olivia Mackall and others.

diff -r b70c9697ab41 -r 6cfa30681a1d mercurial/commands.py --- a/mercurial/commands.py Fri Feb 11 16:52:48 2022 -0800 +++ b/mercurial/commands.py Tue Feb 15 20:24:46 2022 -0800 @@ -7906,7 +7906,7 @@ ) license = _( b"(see https://mercurial-scm.org for more information)\n" - b"\nCopyright (C) 2005-2021 Olivia Mackall and others\n" + b"\nCopyright (C) 2005-2022 Olivia Mackall and others\n" b"This is free software; see the source for copying conditions. " b"There is NO\nwarranty; " b"not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" diff -r b70c9697ab41 -r 6cfa30681a1d mercurial/dirstateutils/v2.py --- a/mercurial/dirstateutils/v2.py Fri Feb 11 16:52:48 2022 -0800 +++ b/mercurial/dirstateutils/v2.py Tue Feb 15 20:24:46 2022 -0800 @@ -303,17 +303,17 @@ # Determine if the next entry is in the same sub-tree, if so don't # pack yet next_path = sorted_map[index][0] - should_pack = not get_folder(next_path).startswith(current_folder) + should_pack = not is_ancestor(next_path, current_folder) if should_pack: pack_directory_children(current_node, copy_map, data, stack) while stack and current_node.path != b"": # Go up the tree and write until we reach the folder of the next # entry (if any, otherwise the root) parent = current_node.parent - in_parent_folder_of_next_entry = next_path is not None and ( - get_folder(next_path).startswith(get_folder(stack[-1].path)) + in_ancestor_of_next_path = next_path is not None and ( + is_ancestor(next_path, get_folder(stack[-1].path)) ) - if parent is None or in_parent_folder_of_next_entry: + if parent is None or in_ancestor_of_next_path: break pack_directory_children(parent, copy_map, data, stack) current_node = parent @@ -344,13 +344,34 @@ return path.rsplit(b'/', 1)[0] if b'/' in path else b'' +def is_ancestor(path, maybe_ancestor): + """Returns whether `maybe_ancestor` is an ancestor of `path`. + + >>> is_ancestor(b"a", b"") + True + >>> is_ancestor(b"a/b/c", b"a/b/c") + False + >>> is_ancestor(b"hgext3rd/__init__.py", b"hgext") + False + >>> is_ancestor(b"hgext3rd/__init__.py", b"hgext3rd") + True + """ + if maybe_ancestor == b"": + return True + if path <= maybe_ancestor: + return False + path_components = path.split(b"/") + ancestor_components = maybe_ancestor.split(b"/") + return all(c == o for c, o in zip(path_components, ancestor_components)) + + def move_to_correct_node_in_tree(target_folder, current_node, stack): """ Move inside the dirstate node tree to the node corresponding to `target_folder`, creating the missing nodes along the way if needed. """ while target_folder != current_node.path: - if target_folder.startswith(current_node.path): + if is_ancestor(target_folder, current_node.path): # We need to go down a folder prefix = target_folder[len(current_node.path) :].lstrip(b'/') subfolder_name = prefix.split(b'/', 1)[0] diff -r b70c9697ab41 -r 6cfa30681a1d mercurial/helptext/hg.1.txt --- a/mercurial/helptext/hg.1.txt Fri Feb 11 16:52:48 2022 -0800 +++ b/mercurial/helptext/hg.1.txt Tue Feb 15 20:24:46 2022 -0800 @@ -112,7 +112,7 @@ Copying """"""" -Copyright (C) 2005-2021 Olivia Mackall. +Copyright (C) 2005-2022 Olivia Mackall. Free use of this software is granted under the terms of the GNU General Public License version 2 or any later version. diff -r b70c9697ab41 -r 6cfa30681a1d mercurial/helptext/hgignore.5.txt --- a/mercurial/helptext/hgignore.5.txt Fri Feb 11 16:52:48 2022 -0800 +++ b/mercurial/helptext/hgignore.5.txt Tue Feb 15 20:24:46 2022 -0800 @@ -26,7 +26,7 @@ Copying ======= This manual page is copyright 2006 Vadim Gelfer. -Mercurial is copyright 2005-2021 Olivia Mackall. +Mercurial is copyright 2005-2022 Olivia Mackall. Free use of this software is granted under the terms of the GNU General Public License version 2 or any later version. diff -r b70c9697ab41 -r 6cfa30681a1d mercurial/helptext/hgrc.5.txt --- a/mercurial/helptext/hgrc.5.txt Fri Feb 11 16:52:48 2022 -0800 +++ b/mercurial/helptext/hgrc.5.txt Tue Feb 15 20:24:46 2022 -0800 @@ -34,7 +34,7 @@ Copying ======= This manual page is copyright 2005 Bryan O'Sullivan. -Mercurial is copyright 2005-2021 Olivia Mackall. +Mercurial is copyright 2005-2022 Olivia Mackall. Free use of this software is granted under the terms of the GNU General Public License version 2 or any later version. diff -r b70c9697ab41 -r 6cfa30681a1d mercurial/utils/urlutil.py --- a/mercurial/utils/urlutil.py Fri Feb 11 16:52:48 2022 -0800 +++ b/mercurial/utils/urlutil.py Tue Feb 15 20:24:46 2022 -0800 @@ -1,6 +1,6 @@ # utils.urlutil - code related to [paths] management # -# Copyright 2005-2021 Olivia Mackall and others +# Copyright 2005-2022 Olivia Mackall and others # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. diff -r b70c9697ab41 -r 6cfa30681a1d setup.py --- a/setup.py Fri Feb 11 16:52:48 2022 -0800 +++ b/setup.py Tue Feb 15 20:24:46 2022 -0800 @@ -1722,7 +1722,7 @@ extra['console'] = [ { 'script': 'hg', - 'copyright': 'Copyright (C) 2005-2021 Olivia Mackall and others', + 'copyright': 'Copyright (C) 2005-2022 Olivia Mackall and others', 'product_version': version, } ] diff -r b70c9697ab41 -r 6cfa30681a1d tests/hghave.py --- a/tests/hghave.py Fri Feb 11 16:52:48 2022 -0800 +++ b/tests/hghave.py Tue Feb 15 20:24:46 2022 -0800 @@ -1137,11 +1137,11 @@ return version and sv(_bytes2sys(version.group(0))) >= sv('2019.10.17') -@check("rustfmt", "rustfmt tool at version nightly-2020-10-04") +@check("rustfmt", "rustfmt tool at version nightly-2021-11-02") def has_rustfmt(): # We use Nightly's rustfmt due to current unstable config options. return matchoutput( - '`rustup which --toolchain nightly-2020-10-04 rustfmt` --version', + '`rustup which --toolchain nightly-2021-11-02 rustfmt` --version', b'rustfmt', ) diff -r b70c9697ab41 -r 6cfa30681a1d tests/test-check-rust-format.t --- a/tests/test-check-rust-format.t Fri Feb 11 16:52:48 2022 -0800 +++ b/tests/test-check-rust-format.t Tue Feb 15 20:24:46 2022 -0800 @@ -3,6 +3,8 @@ $ . "$TESTDIR/helpers-testrepo.sh" $ cd "$TESTDIR"/.. + +Warning: Keep this in sync with hghave.py $ RUSTFMT=$(rustup which --toolchain nightly-2021-11-02 rustfmt) $ for f in `testrepohg files 'glob:**/*.rs'` ; do > $RUSTFMT --check --edition=2018 --unstable-features --color=never $f diff -r b70c9697ab41 -r 6cfa30681a1d tests/test-dirstate.t --- a/tests/test-dirstate.t Fri Feb 11 16:52:48 2022 -0800 +++ b/tests/test-dirstate.t Tue Feb 15 20:24:46 2022 -0800 @@ -103,3 +103,21 @@ 1 $ hg status ? a + +#if dirstate-v2 +Check that folders that are prefixes of others do not throw the packer into an +infinite loop. + + $ cd .. + $ hg init infinite-loop + $ cd infinite-loop + $ mkdir hgext3rd hgext + $ touch hgext3rd/__init__.py hgext/zeroconf.py + $ hg commit -Aqm0 + + $ hg st -c + C hgext/zeroconf.py + C hgext3rd/__init__.py + + $ cd .. +#endif diff -r b70c9697ab41 -r 6cfa30681a1d tests/test-doctest.py --- a/tests/test-doctest.py Fri Feb 11 16:52:48 2022 -0800 +++ b/tests/test-doctest.py Tue Feb 15 20:24:46 2022 -0800 @@ -132,6 +132,7 @@ ('mercurial.cmdutil', '{}'), ('mercurial.color', '{}'), ('mercurial.dagparser', "{'optionflags': 4}"), + ('mercurial.dirstateutils.v2', '{}'), ('mercurial.encoding', '{}'), ('mercurial.fancyopts', '{}'), ('mercurial.formatter', '{}'),