changeset 52282:51a350a22d0c

branching: merge stable into default
author Raphaël Gomès <rgomes@octobus.net>
date Wed, 20 Nov 2024 15:53:19 +0100
parents 65d516db7309 (current diff) 854e2b9bca57 (diff)
children fad30cb98579
files rust/rhg/src/commands/status.rs
diffstat 14 files changed, 498 insertions(+), 149 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Thu Nov 14 16:45:23 2024 +0100
+++ b/.hgsigs	Wed Nov 20 15:53:19 2024 +0100
@@ -268,3 +268,4 @@
 eae3ec345e5e62e653de32a87a70f6fa7241afde 0 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
+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
--- a/.hgtags	Thu Nov 14 16:45:23 2024 +0100
+++ b/.hgtags	Wed Nov 20 15:53:19 2024 +0100
@@ -284,3 +284,4 @@
 eae3ec345e5e62e653de32a87a70f6fa7241afde 6.8.2
 dc97e8670decc9925c2f570bdca636778184b199 6.9rc0
 31d45a1cbc479ac73fc8b355abe99e090eb6c747 6.9rc1
+b267c5764cc6b804c619a42067405f27e8705beb 6.9
--- a/Makefile	Thu Nov 14 16:45:23 2024 +0100
+++ b/Makefile	Wed Nov 20 15:53:19 2024 +0100
@@ -226,12 +226,14 @@
   fedora \
   linux-wheels \
   linux-wheels-x86_64 \
+  linux-wheels-x86_64-musl \
   linux-wheels-i686 \
+  linux-wheels-i686-musl \
   ppa
 
 # Forward packaging targets for convenience.
 $(packaging_targets):
-	$(MAKE) -C contrib/packaging $@
+	$(MAKE) -C contrib/packaging $(MAKEFLAGS) $@
 
 osx:
 	rm -rf build/mercurial
--- a/contrib/heptapod-ci.yml	Thu Nov 14 16:45:23 2024 +0100
+++ b/contrib/heptapod-ci.yml	Wed Nov 20 15:53:19 2024 +0100
@@ -20,6 +20,7 @@
       when: always
 
 stages:
+  - nightly-trigger
   - build
   - checks
   - tests
@@ -31,6 +32,14 @@
 image: registry.heptapod.net/mercurial/ci-images/mercurial-core:$HG_CI_IMAGE_TAG
 
 variables:
+    # to debug use:
+    #
+    #   RE_BRANCH: '/^topic/.+/.+$/'
+    #   RE_TOPIC: '/^xxx/'
+    #
+    # Instead of the two following lines:
+    RE_BRANCH: '/^branch/.+$/'
+    RE_TOPIC: '/^topic/.+/.+$/'
     PYTHON: python
     HG_CI_IMAGE_TAG: "v2.1"
     # a directory dedicated to creating files and temporary clone
@@ -48,6 +57,17 @@
   # starting.
   needs: []
 
+# dummy job that serve dependencies purpose
+.dummy:
+  # smallest I know of
+  image: busybox
+  variables:
+    GIT_STRATEGY: none
+    CI_CLEVER_CLOUD_FLAVOR: "XS"
+  script:
+    - echo 'nothing to see here'
+
+
 # a dummy job that only serve to trigger others
 #
 # This is useful for two reasons:
@@ -55,15 +75,21 @@
 # - manual starting job cannot make the pipeline "fails" and block a merge,
 #   while "on_success" job depending on manual trigger works fine in that regard.
 .trigger:
-  extends: .all
-  # smallest I know of
-  image: busybox
+  extends:
+    - .all
+    - .dummy
   when: manual
-  variables:
-    GIT_STRATEGY: none
-    CI_CLEVER_CLOUD_FLAVOR: "XS"
-  script:
-    - echo 'nothing to see here'
+
+
+trigger-nightly-build:
+  extends: .trigger
+  stage: nightly-trigger
+  rules:
+    - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+      when: manual
+      allow_failure: true
+    - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+      when: never
 
 .build-wheel:
   extends: .all
@@ -86,6 +112,8 @@
       - wheels/
     expire_in: 1 week
 
+
+# build linux wheel for amd64
 build-c-wheel:
   extends: .build-wheel
   variables:
@@ -100,6 +128,115 @@
           - cp312-cp312
           - cp313-cp313
 
+trigger-wheel-musl:
+  extends: .trigger
+  stage: build
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: never
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
+
+build-c-wheel-musl:
+  extends: build-c-wheel
+  image: "registry.heptapod.net/mercurial/ci-images/core-wheel-x86_64-musl-c:v3.0"
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    needs:
+      - trigger-nightly-build
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    needs:
+      - "trigger-wheel-musl"
+
+trigger-wheel-i686:
+  extends: .trigger
+  stage: build
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: never
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
+
+build-c-wheel-i686:
+  extends: build-c-wheel
+  image: "registry.heptapod.net/mercurial/ci-images/core-wheel-i686-c:v3.0"
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    needs:
+      - trigger-nightly-build
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    needs:
+      - "trigger-wheel-i686"
+
+trigger-wheel-i686-musl:
+  extends: .trigger
+  stage: build
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: never
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
+
+build-c-wheel-i686-musl:
+  extends: build-c-wheel
+  image: "registry.heptapod.net/mercurial/ci-images/core-wheel-i686-musl-c:v3.0"
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    needs:
+      - trigger-nightly-build
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    needs:
+      - "trigger-wheel-i686-musl"
+
+trigger-wheel-arm64:
+  extends: .trigger
+  stage: build
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: never
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
+
+build-c-wheel-arm64:
+  extends: build-c-wheel
+  image: "registry.heptapod.net/mercurial/ci-images/core-wheel-arm64-c:v3.0"
+  tags:
+    - arm64
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    needs:
+      - trigger-nightly-build
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    needs:
+      - "trigger-wheel-arm64"
+
+trigger-wheel-arm64-musl:
+  extends: .trigger
+  stage: build
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: never
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
+
+build-c-wheel-arm64-musl:
+  extends: build-c-wheel
+  image: "registry.heptapod.net/mercurial/ci-images/core-wheel-arm64-musl-c:v3.0"
+  tags:
+    - arm64
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    needs:
+      - trigger-nightly-build
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    needs:
+      - "trigger-wheel-arm64-musl"
+
 .runtests:
     extends: .all
     stage: tests
@@ -225,12 +362,18 @@
 trigger-pycompat:
   extends: .trigger
   stage: py-version-compat
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: on_success
+    needs:
+      - trigger-nightly-build
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
 
 .test-c-pycompat:
     extends: .test-c
     stage: py-version-compat
-    needs:
-      - trigger-pycompat
     variables:
         WHEEL_TYPE: "c"
 
@@ -242,6 +385,7 @@
     variables:
         PYTHON: python3.8
     needs:
+      - job: trigger-pycompat
       - job: build-c-wheel
         parallel:
           matrix:
@@ -252,6 +396,7 @@
     variables:
         PYTHON: python3.12
     needs:
+      - job: trigger-pycompat
       - job: build-c-wheel
         parallel:
           matrix:
@@ -270,6 +415,7 @@
     variables:
         PYTHON: python3.13
     needs:
+      - job: trigger-pycompat
       - job: build-c-wheel
         parallel:
           matrix:
@@ -319,6 +465,12 @@
 trigger-wheel-windows:
   extends: .trigger
   stage: build
+  rules:
+  - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+    when: never
+  - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+    when: manual
+    allow_failure: true
 
 build-c-wheel-windows:
     extends: .windows
@@ -326,7 +478,13 @@
     # wait for someone to click on "trigger-wheel-windows"
     when: on_success
     needs:
-      - "trigger-wheel-windows"
+    rules:
+    - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+      needs:
+        - trigger-nightly-build
+    - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+      needs:
+        - "trigger-wheel-windows"
     variables:
       MERCURIAL_SETUP_FORCE_TRANSLATIONS: "1"
     script:
@@ -444,7 +602,13 @@
 # The weird directory structure match the one we use for Linux to deal with the
 # multiple jobs. (all this might be unnecessary)
 build-c-wheel-macos:
-    when: manual  # avoid overloading the CI by default
+    rules:
+    - if: $CI_COMMIT_BRANCH =~ $RE_BRANCH
+      needs:
+        - trigger-nightly-build
+    - if: $CI_COMMIT_BRANCH =~ $RE_TOPIC
+      when: manual  # avoid overloading the CI by default
+      allow_failure: true
     stage: build
     tags:
       - macos
@@ -464,6 +628,74 @@
         - wheels
       expire_in: 1 week
 
+
+.nightly_build_step:
+  extends: .all
+  stage: upload
+  rules:
+    - if: '$CI_COMMIT_BRANCH =~ $RE_BRANCH'
+      # note that at the time of writing this, this job depends on multiple
+      # manual one. So it will not run by default, but will automatically run
+      # if the manual jobs are triggered.
+      #
+      # Also beware that "on_success" will ignore failure of manual test we
+      # directly depends on. This currently relevant for the "test-3.x-c"
+      # tests.
+      when: on_success
+    - if: '$CI_COMMIT_BRANCH =~ $RE_TOPIC'
+      when: never
+
+# a dummy job that gather greatly parallel object into one.
+#
+# It exists because gitlab-ci has a "50 jobs" limit on "needs" entries.
+# (yes, this is sad)
+#
+.sink:
+  extends:
+    - .nightly_build_step
+    - .dummy
+
+test-result-linux:
+  extends: .sink
+  needs:
+    - test-c
+    - test-3.8-c
+    - test-3.12-c
+    - test-3.13-c
+
+test-result-macos:
+  extends: .sink
+  needs:
+    - macos
+
+test-result-windows:
+  extends: .sink
+  needs:
+    - windows
+
+wheel-result-linux:
+  extends: .sink
+  needs:
+    - build-c-wheel
+    - build-c-wheel-musl
+    - build-c-wheel-i686
+    - build-c-wheel-i686-musl
+    - build-c-wheel-arm64
+    - build-c-wheel-arm64-musl
+  artifacts:
+      paths:
+        - wheels
+      expire_in: 1 week
+
+wheel-result-windows:
+  extends: .sink
+  needs:
+    - build-c-wheel-windows
+  artifacts:
+      paths:
+        - wheels
+      expire_in: 1 week
+
 # Upload nightly build wheel on the heptapod registry on test success
 #
 # At the time this task is added, since the mac wheels are built on shell
@@ -474,38 +706,17 @@
 # have to prevent the CI token to upload to the registry and have dedicated
 # credential accessible only from protected branches.
 upload-wheel-nightly:
-  extends: .all
+  extends: .nightly_build_step
   image: "registry.heptapod.net/mercurial/ci-images/twine:v3.0"
-  stage: upload
   # because we don't want to upload only half of a wheel
   interruptible: false
-  rules:
-    - if: $CI_COMMIT_BRANCH =~ /^branch\/.*/
-      # note that at the time of writing this, this job depends on multiple
-      # manual one. So it will not run by default, but will automatically run
-      # if the manual jobs are triggered.
-      #
-      # Also beware that "on_success" will ignore failure of manual test we
-      # directly depends on. This currently relevant for the "test-3.x-c"
-      # tests.
-      when: on_success
-    - if: $CI_COMMIT_BRANCH =~ /^topic\/.*/
-      when: never
-      # if you need to test this, make it
-      # when: manual
-      # allow_failure: true
   needs:
-    - build-c-wheel
+    - wheel-result-linux
+    - wheel-result-windows
     - build-c-wheel-macos
-    - build-c-wheel-windows
-    - test-c
-    - macos
-    # if we also requires windows to be happy, reach the "50 needed jobs" limit.
-    # So we need some intermediate job to reduce the number.
-    # - windows
-    - test-3.8-c
-    - test-3.12-c
-    - test-3.13-c
+    - test-result-linux
+    - test-result-macos
+    - test-result-windows
   # It would be nice to be able to restrict that a bit to protected branch only
   variables:
     TWINE_USERNAME: gitlab-ci-token
--- a/contrib/install-windows-dependencies.ps1	Thu Nov 14 16:45:23 2024 +0100
+++ b/contrib/install-windows-dependencies.ps1	Wed Nov 20 15:53:19 2024 +0100
@@ -183,7 +183,7 @@
     Install-Python3 "Python 3.13 64-bit" ${prefix}\assets\python313-x64.exe ${prefix}\python313-x64 ${pip}
 
     Write-Output "installing Visual Studio 2017 Build Tools and SDKs"
-    Invoke-Process ${prefix}\assets\vs_buildtools.exe "--quiet --wait --norestart --nocache --channelUri https://aka.ms/vs/15/release/channel --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Component.Windows10SDK.17763 --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows10SDK --add Microsoft.VisualStudio.Component.VC.140"
+    Invoke-Process ${prefix}\assets\vs_buildtools.exe "--quiet --wait --norestart --nocache --channelUri https://aka.ms/vs/15/release/channel --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Component.Windows10SDK.17763 --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Component.Windows10SDK --add Microsoft.VisualStudio.Component.VC.140 --add Microsoft.VisualStudio.Component.VC.Tools.ARM64"
 
     Write-Output "installing PyOxidizer"
     Invoke-Process msiexec.exe "/i ${prefix}\assets\PyOxidizer.msi /l* ${prefix}\assets\PyOxidizer.log /quiet"
--- a/contrib/packaging/Makefile	Thu Nov 14 16:45:23 2024 +0100
+++ b/contrib/packaging/Makefile	Wed Nov 20 15:53:19 2024 +0100
@@ -45,8 +45,10 @@
 	@echo 'linux-wheels'
 	@echo '   Build Linux manylinux wheels using Docker.'
 	@echo ''
-	@echo 'linux-wheels-{x86_64, i686}'
+	@echo 'linux-wheels-{x86_64, i686}{,-musl}'
 	@echo '   Build Linux manylinux wheels for a specific architecture using Docker'
+	@echo '   The -musl variants is suitable for system using "musl" instead of "glibc",
+	@echo '   for example: Alpine linux.'
 	@echo ''
 	@echo 'deb'
 	@echo '   Build a Debian package locally targeting the current system'
@@ -125,12 +127,24 @@
 $(foreach release,$(RHEL_RELEASES),$(eval $(call rhel_targets,$(release))))
 
 .PHONY: linux-wheels
-linux-wheels: linux-wheels-x86_64 linux-wheels-i686
+linux-wheels: linux-wheels-x86_64 linux-wheels-x86_64-musl linux-wheels-i686 linux-wheels-i686-musl
+
+img_reg="registry.heptapod.net/mercurial/ci-images"
+img_tag="v3.0"
+whl_sh="/src/contrib/packaging/build-linux-wheels.sh"
 
 .PHONY: linux-wheels-x86_64
 linux-wheels-x86_64:
-	docker run --rm -ti -v `pwd`/../..:/src registry.heptapod.net/mercurial/ci-images/core-wheel-x86_64-c:v3.0 /src/contrib/packaging/build-linux-wheels.sh
+	docker run --rm -ti -v `pwd`/../..:/src $(img_reg)/core-wheel-x86_64-c:$(img_tag) $(whl_sh)
+
+.PHONY: linux-wheels-x86_64-musl
+linux-wheels-x86_64-musl:
+	docker run --rm -ti -v `pwd`/../..:/src $(img_reg)/core-wheel-x86_64-musl-c:$(img_tag) $(whl_sh)
 
 .PHONY: linux-wheels-i686
 linux-wheels-i686:
-	docker run -e "HGTEST_JOBS=$(shell nproc)" --rm -ti -v `pwd`/../..:/src quay.io/pypa/manylinux1_i686 linux32 /src/contrib/packaging/build-linux-wheels.sh
+	docker run --rm -ti -v `pwd`/../..:/src $(img_reg)/core-wheel-i686-c:$(img_tag) $(whl_sh)
+
+.PHONY: linux-wheels-i686-musl
+linux-wheels-i686-musl:
+	docker run --rm -ti -v `pwd`/../..:/src $(img_reg)/core-wheel-i686-musl-c:$(img_tag) $(whl_sh)
--- a/contrib/packaging/build-linux-wheels.sh	Thu Nov 14 16:45:23 2024 +0100
+++ b/contrib/packaging/build-linux-wheels.sh	Wed Nov 20 15:53:19 2024 +0100
@@ -20,14 +20,17 @@
 #     therefor not compatible.
 cp -r /src/ /tmp/src/
 cd /tmp/src/
-hg purge --all --no-confirm
+# clear potentially cached artifact from the host
+# (we could narrow this purge probably)
+hg purge \
+    --ignored \
+    --no-confirm
 
-export HGRCPATH=/tmp/build-config.rc
-cat << EOF > $HGRCPATH
-[trusted]
-users=*
-groups=*
-EOF
+
+if [ ! -e /src/dist/ ]; then
+    mkdir -p /src/dist
+    chown `stat /src/ -c %u:%g` /src/dist/
+fi
 
 for py in $PYTHON_TARGETS; do
     echo 'build wheel for' $py
@@ -39,6 +42,6 @@
     contrib/build-one-linux-wheel.sh $py $tmp_wd
     # fix the owner back to the repository owner
     chown `stat /src/ -c %u:%g` $tmp_wd/*.whl
-    mv $tmp_wd/*.whl /src/dist
+    mv $tmp_wd/*.whl /src/dist/
 done
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/packaging/build-macos-wheels.sh	Wed Nov 20 15:53:19 2024 +0100
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# This is a convenience script to build all of the wheels outside of the CI
+# system.  It requires the cibuildwheel package to be installed, and the
+# executable on PATH, as well as `msgfmt` from gettext, which can be installed
+# with `brew` as follows:
+#
+#   $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
+#   $ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
+#   <logout>
+#   $ brew install gettext
+#
+# A system-wide installation of the version of python corresponding to each
+# wheel is required.  They can be installed by this script by setting `CI=true`
+# in the environment before running it, and providing the `sudo` password when 
+# prompted.
+
+set -e
+
+# Build translations; requires msgfmt on PATH.
+export MERCURIAL_SETUP_FORCE_TRANSLATIONS=1
+
+if ! which msgfmt 2>/dev/null 1>/dev/null; then
+    echo "msgfmt executable not found" >&2
+    exit 1
+fi
+
+# Prevent building pypy wheels, which is broken.
+export CIBW_SKIP=pp*
+
+export CIBW_ARCHS=universal2
+
+# TODO: purge the repo?
+
+cibuildwheel --output-dir dist/wheels
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/packaging/build-windows-wheels.bat	Wed Nov 20 15:53:19 2024 +0100
@@ -0,0 +1,37 @@
+@echo off
+
+REM - This is a convenience script to build all of the wheels outside of the CI
+REM - system.  It requires the cibuildwheel package to be installed, and the
+REM - executable on PATH, as well as `msgfmt.exe` from gettext and the x86,
+REM - amd64, and arm64 compilers from VS BuildTools.  These can be obtained by
+REM - running `contrib/install-windows-dependencies.ps1`.
+
+REM - None of the variable set here live past this script exiting.
+setlocal
+
+REM - Build translations; requires msgfmt.exe on PATH.
+set MERCURIAL_SETUP_FORCE_TRANSLATIONS=1
+
+REM - Prevent building pypy wheels, which is broken.
+set CIBW_SKIP=pp*
+
+REM - Disable warning about not being able to test without an arm64 runner.
+set CIBW_TEST_SKIP=*-win_arm64
+
+
+REM - arm64 support starts with py39, but the first arm64 installer wasn't
+REM - available until py311, so skip arm64 on the older, EOL versions.
+set CIBW_ARCHS=x86 AMD64
+set CIBW_BUILD=cp38-* cp39-* cp310-*
+
+cibuildwheel --output-dir dist/wheels
+
+if %errorlevel% neq 0 exit /b %errorlevel%
+
+
+set CIBW_ARCHS=x86 AMD64 ARM64
+set CIBW_BUILD=cp311-* cp312-* cp313-*
+
+cibuildwheel --output-dir dist/wheels
+
+if %errorlevel% neq 0 exit /b %errorlevel%
--- a/contrib/packaging/linux-wheel-centos5-blacklist	Thu Nov 14 16:45:23 2024 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-test-convert-git.t
-test-subrepo-git.t
-test-patchbomb-tls.t
--- a/mercurial/helptext/rust.txt	Thu Nov 14 16:45:23 2024 +0100
+++ b/mercurial/helptext/rust.txt	Wed Nov 20 15:53:19 2024 +0100
@@ -1,6 +1,23 @@
 Mercurial can be augmented with Rust extensions for speeding up certain
 operations.
 
+Word of Caution
+===============
+
+Using the Rust extension might result in the use of various repository formats
+that are not supported by non-Rust mercurial. When using a Mercurial
+without Rust support on the same repositories, you might need to downgrade your
+repository formats and/or activate cripplingly slow paths for compatibility.
+For details, see:
+
+    - :hg:`help config.format.use-persistent-nodemap`
+    - :hg:`help config.format.use-dirstate-v2`
+
+In addition, while the tests are run with the Rust code, there might be
+subtle undetected divergences from the historical non-Rust code. So keep
+your eyes open and report any oddity. Rust is not considered a first class
+citizen to the project yet.
+
 Compatibility
 =============
 
@@ -9,6 +26,9 @@
 mileage may vary, but by all means do give us feedback or signal your interest
 for better support.
 
+For compatibility with non-Rust version of Mercurial check the previous "Word of
+Caution" section.
+
 No Rust extensions are available for Windows at this time.
 
 Features
@@ -49,13 +69,19 @@
 
 Users of `pip` can install the Rust extensions with the following command::
 
-  $ pip install mercurial --global-option --rust --no-use-pep517
+  $ pip install mercurial \
+        --global-option \
+        --rust \
+        --no-use-pep517 \
+        --no-binary mercurial
 
 `--no-use-pep517` is here to tell `pip` to preserve backwards compatibility with
 the legacy `setup.py` system. Mercurial has not yet migrated its complex setup
 to the new system, so we still need this to add compiled extensions.
 
-This might take a couple of minutes because you're compiling everything.
+`--no-binary` is there to tell pip to not use the pre-compiled wheels that are
+missing rust support. This might take a couple of minutes because you're
+compiling everything.
 
 See the "Checking for Rust" section to see if the install succeeded.
 
--- a/relnotes/6.9	Thu Nov 14 16:45:23 2024 +0100
+++ b/relnotes/6.9	Wed Nov 20 15:53:19 2024 +0100
@@ -1,89 +1,21 @@
-= Mercurial 6.9rc1 =
-
-/!\ These are release notes for a release candidate version. Any and all points can be reverted before the final release.
+= Mercurial 6.9 =
 
- * streamclone: disable the volatile file open handle optimization on Windows
- * rust-update: make `update_from_null` respect `worker.numcpu` config option
- * rust-update: handle SIGINT from long-running update threads
- * rust-cpython: add a TODO about repo reuse
- * pytype: add relative timestamp to the output if `ts` is available
- * hgweb: skip logging ConnectionAbortedError
-
-Below are many, many changes that have to do with building/testing wheels,
-adding some sharding to the CI and MacOS + Windows compatibility work:
+== Backwards Compatibility Changes ==
 
- * run-tests: don't use shell call for subprocess
- * run-tests: add a --hg-wheel options to test a pre-built wheel
- * ci: unify the way `check-pytype` inherit the common setting
- * ci: split the jobs on more stage
- * ci: build a wheel and use it to run c tests
- * tests: stabilize `test-extdiff.t` on macOS
- * tests: disable `test-git-interop.t` with a requirements directive
- * tests: disable a section of `test-hgrc.t` that may hit a zeroconf bug
- * ci: add a runner for Windows 10
- * tests: treat `select` as a built-in module on Windows
- * tests: disable a section of `test-paths.t` that may hit a zeroconf bug
- * tests: conditionalize missing output in test-racy-mutations.t on Windows
- * tests: add a "missing" tests for manifest content in test-racy-mutations.t
- * tests: bump the wait timeouts in test-racy-mutations.t
- * test-install: use the global hg for the install step
- * test-install: glob instance of "python" in warning
- * ci: pre-adjust some identation
- * setup: add a way to force the setup to translate (or fail)
- * ci: use smaller VM to build wheel
- * ci: use a pre-setup many-linux image to build wheel
- * ci: build (and use) wheel for all supported version
- * ci: automatically compute the python tag we use to identify tag
- * run-tests: install wheel using --prefix instead of --user
- * pycompat: drop some now useless workaround for makedirs
- * wheel: build mac os wheel through the CI
- * ci: use the macos wheel to run tests
- * ci: use extends instead of <<: *x
- * ci: move some variables closer to their usage
- * ci: rationalize variable usage
- * ci: abstract the of absolute /tmp/ path
- * ci: move the "tempory work dir" to "concurrency-safe" location
- * ci: adjust the starting port range to runner concurrency
- * ci: have the mac test run if you trigger building the mac wheel
- * run-tests: implement crude sharding support
- * ci: shard the test run on mac os X
- * dev-version: change the scheme of non tagged version
- * wheel: enforce that translation being build for macos wheel
- * run-tests: focus on listing the selected test for the shard tests
- * run-tests: cleanup the "output" directory after the related tests
- * tests: drop PYTHONPATH manipulation in test-pushvars.t
- * windows: work around argument size limitation in test-bookmarks-pushpull.t
- * windows: adjust PYTHONPATH update in test-status-color.t
- * ci: use a concurrency safe TMP dir on Windows
- * ci: again common element into a `.windows` template
- * ci: split the windows runtest invocation into more granular variables
- * windows: skip test-clonebundles-autogen.t in the CI
- * ci: adjust port range on windows too
- * windows: simply rely on the PATH adjustment to find python.exe in tests
- * wheel: assign CIBW_SKIP globally
- * wheel: make --hg-wheel works on Windows
- * wheel: build Windows wheels too
- * wheel: explicitly list built architecture
- * wheel: test the built wheel in the windows tests
- * ci: shard the tests on windows too
- * wheel: enforce that translation being build for windows wheel
- * setup: remote a debug statement that slipped through
- * setup: factor version computation in a function
- * setup: use the same code to compute tag from archive
- * wheel: add a platform level to the wheel directories
- * wheel: add a job uploading nightly build
- * wheels: factor the core of Linux wheel building into a script
- * wheels: update the Linux wheels make target
- * clone: properly exclude rev-branch-cache from post clone cache warming
- * setup: make sure Rust build its extension for the right python
- * setup: preserve version part after the "+" on Windows
- * wheel: build windows wheel for ARM64 too
- * ci: adds a trigger for all pycompat jobs
- * ci: let the Windows runner decide how many job they want to run
+ * This release drops support for Python 3.6 and 3.7.
+ * Starting with this release and hopefully for the forseeable future,
+   we are now building wheels for most architectures.
+   /!\ Note that for Rust users installing via `pip` or `pipx`, you will need
+   to specify `--no-binary` to continue using Rust since we do not yet package
+   the Rust compilation in our wheels. We plan on fixing this for 7.0.
+ * Python 3.13 changed how it handles docstrings (namely removing uniform
+   leading whitespace for every line), which forced us to align the
+   representation of our help text with this new behavior across all versions.
+   Due to this and a lack of time and expertise from contributors, a lot of
+   existing translations could be missing. The effort of i18n in general has
+   died down many years ago, but if this matters to you, feel free to send
+   your contributions. 
 
-= Mercurial 6.9rc0 =
-
-/!\ These are release notes for a release candidate version. Any and all points can be reverted before the final release.
 
 == New Features ==
 
@@ -153,11 +85,9 @@
  * doc: generate separate commands/topics/extension pages
  * extdiff: don't run gui programs when in a cli-only environment
  * clonebundles: stop shell quoting `HGCB_BUNDLE_BASENAME` environment variable
- * rev-branch-cache: disable mmapping by default on Windows
-
-== Backwards Compatibility Changes ==
-
- * This release drops support for Python 3.6 and 3.7.
+ * streamclone: disable the volatile file open handle optimization on Windows
+ * pytype: add relative timestamp to the output if `ts` is available
+ * hgweb: skip logging ConnectionAbortedError
 
 == Internal API Changes ==
 
@@ -175,3 +105,94 @@
  * A whole bunch of typing improvements, which in turn found many bugs
  * Test suite improvements
  * Various packaging improvements
+
+Below are many, many changes that have to do with building/testing wheels,
+adding some sharding to the CI and MacOS + Windows compatibility work:
+
+ * ci: abstract the branch matching regexp
+ * ci: add "sink" for parallel tests
+ * ci: for branches, use a single trigger
+ * packaging: explain why we purge while building wheels
+ * wheels: rely on the image config to be able to access the repository
+ * packaging: remove the i686 wheel from the linux-wheels target
+ * packaging: propagate the make option to packaging target
+ * packaging: factor the linux-wheels-x86_64 a bit
+ * wheel: add a target for amdx86_64-musl wheels
+ * wheel: also build the musl wheel in the ci
+ * wheel: reintroduce the building of i686 wheel
+ * wheels: also build the i686 wheel in the CI
+ * contrib: install the arm64 compiler tools in the Windows dependency script
+ * contrib: add a bat file to build all of the wheels on Windows
+ * wheels: remove deprecated blacklist
+ * wheels: make sure we create the `dist/` directory in the make target
+ * contrib: add a script to build all of the wheels on macOS
+ * wheel: also build wheel for linux arm64 in the CI
+ * ci: add sink for wheels too
+ * run-tests: don't use shell call for subprocess
+ * run-tests: add a --hg-wheel options to test a pre-built wheel
+ * ci: unify the way `check-pytype` inherit the common setting
+ * ci: split the jobs on more stage
+ * ci: build a wheel and use it to run c tests
+ * tests: stabilize `test-extdiff.t` on macOS
+ * tests: disable `test-git-interop.t` with a requirements directive
+ * tests: disable a section of `test-hgrc.t` that may hit a zeroconf bug
+ * ci: add a runner for Windows 10
+ * tests: treat `select` as a built-in module on Windows
+ * tests: disable a section of `test-paths.t` that may hit a zeroconf bug
+ * tests: conditionalize missing output in test-racy-mutations.t on Windows
+ * tests: add a "missing" tests for manifest content in test-racy-mutations.t
+ * tests: bump the wait timeouts in test-racy-mutations.t
+ * test-install: use the global hg for the install step
+ * test-install: glob instance of "python" in warning
+ * ci: pre-adjust some identation
+ * setup: add a way to force the setup to translate (or fail)
+ * ci: use smaller VM to build wheel
+ * ci: use a pre-setup many-linux image to build wheel
+ * ci: build (and use) wheel for all supported version
+ * ci: automatically compute the python tag we use to identify tag
+ * run-tests: install wheel using --prefix instead of --user
+ * pycompat: drop some now useless workaround for makedirs
+ * wheel: build mac os wheel through the CI
+ * ci: use the macos wheel to run tests
+ * ci: use extends instead of <<: *x
+ * ci: move some variables closer to their usage
+ * ci: rationalize variable usage
+ * ci: abstract the of absolute /tmp/ path
+ * ci: move the "tempory work dir" to "concurrency-safe" location
+ * ci: adjust the starting port range to runner concurrency
+ * ci: have the mac test run if you trigger building the mac wheel
+ * run-tests: implement crude sharding support
+ * ci: shard the test run on mac os X
+ * dev-version: change the scheme of non tagged version
+ * wheel: enforce that translation being build for macos wheel
+ * run-tests: focus on listing the selected test for the shard tests
+ * run-tests: cleanup the "output" directory after the related tests
+ * tests: drop PYTHONPATH manipulation in test-pushvars.t
+ * windows: work around argument size limitation in test-bookmarks-pushpull.t
+ * windows: adjust PYTHONPATH update in test-status-color.t
+ * ci: use a concurrency safe TMP dir on Windows
+ * ci: again common element into a `.windows` template
+ * ci: split the windows runtest invocation into more granular variables
+ * windows: skip test-clonebundles-autogen.t in the CI
+ * ci: adjust port range on windows too
+ * windows: simply rely on the PATH adjustment to find python.exe in tests
+ * wheel: assign CIBW_SKIP globally
+ * wheel: make --hg-wheel works on Windows
+ * wheel: build Windows wheels too
+ * wheel: explicitly list built architecture
+ * wheel: test the built wheel in the windows tests
+ * ci: shard the tests on windows too
+ * wheel: enforce that translation being build for windows wheel
+ * setup: remote a debug statement that slipped through
+ * setup: factor version computation in a function
+ * setup: use the same code to compute tag from archive
+ * wheel: add a platform level to the wheel directories
+ * wheel: add a job uploading nightly build
+ * wheels: factor the core of Linux wheel building into a script
+ * wheels: update the Linux wheels make target
+ * clone: properly exclude rev-branch-cache from post clone cache warming
+ * setup: make sure Rust build its extension for the right python
+ * setup: preserve version part after the "+" on Windows
+ * wheel: build windows wheel for ARM64 too
+ * ci: adds a trigger for all pycompat jobs
+ * ci: let the Windows runner decide how many job they want to run
--- a/rust/rhg/src/commands/status.rs	Thu Nov 14 16:45:23 2024 +0100
+++ b/rust/rhg/src/commands/status.rs	Wed Nov 20 15:53:19 2024 +0100
@@ -385,10 +385,10 @@
             })?;
             let working_directory_vfs = repo.working_directory_vfs();
             let store_vfs = repo.store_vfs();
-            let revlog_open_options = default_revlog_options(
+            let filelog_open_options = default_revlog_options(
                 repo.config(),
                 repo.requirements(),
-                RevlogType::Manifestlog,
+                RevlogType::Filelog,
             )?;
             let res: Vec<_> = take(&mut ds_status.unsure)
                 .into_par_iter()
@@ -403,7 +403,7 @@
                         check_exec,
                         &manifest,
                         &to_check.path,
-                        revlog_open_options,
+                        filelog_open_options,
                     ) {
                         Err(HgError::IoError { .. }) => {
                             // IO errors most likely stem from the file being
--- a/tests/test-check-code.t	Thu Nov 14 16:45:23 2024 +0100
+++ b/tests/test-check-code.t	Wed Nov 20 15:53:19 2024 +0100
@@ -93,5 +93,6 @@
 Keep Windows line endings in check
 
   $ testrepohg files 'set:eol(dos)'
+  contrib/packaging/build-windows-wheels.bat
   contrib/win32/hg.bat
   contrib/win32/mercurial.ini