changeset 49487:f59e49f6bee4

branching: merge stable into default
author Raphaël Gomès <rgomes@octobus.net>
date Thu, 01 Sep 2022 16:51:26 +0200
parents 5acbc550d987 (current diff) eb800db3d9cf (diff)
children a7a5740b322a
files mercurial/debugcommands.py mercurial/localrepo.py
diffstat 30 files changed, 622 insertions(+), 351 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Sun Jun 05 07:16:29 2022 +0200
+++ b/.hgsigs	Thu Sep 01 16:51:26 2022 +0200
@@ -231,3 +231,5 @@
 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
+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
--- a/.hgtags	Sun Jun 05 07:16:29 2022 +0200
+++ b/.hgtags	Thu Sep 01 16:51:26 2022 +0200
@@ -244,3 +244,5 @@
 0cc5f74ff7f0f4ac2427096bddbe102dbc2453ae 6.1.4
 288de6f5d724bba7bf1669e2838f196962bb7528 6.2rc0
 094a5fa3cf52f936e0de3f1e507c818bee5ece6b 6.2
+f69bffd00abe3a1b94d1032eb2c92e611d16a192 6.2.1
+b5c8524827d20fe2e0ca8fb1234a0fe35a1a36c7 6.2.2
--- a/contrib/automation/hgautomation/aws.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/contrib/automation/hgautomation/aws.py	Thu Sep 01 16:51:26 2022 +0200
@@ -59,7 +59,7 @@
 UBUNTU_ACCOUNT_ID = '099720109477'
 
 
-WINDOWS_BASE_IMAGE_NAME = 'Windows_Server-2019-English-Full-Base-*'
+WINDOWS_BASE_IMAGE_NAME = 'Windows_Server-2022-English-Full-Base-*'
 
 
 KEY_PAIRS = {
@@ -174,6 +174,23 @@
 net user Administrator "%s"
 wmic useraccount where "name='Administrator'" set PasswordExpires=FALSE
 
+# And set it via EC2Launch so it persists across reboots.
+$config = & $env:ProgramFiles\Amazon\EC2Launch\EC2Launch.exe get-agent-config --format json | ConvertFrom-Json
+$config | ConvertTo-Json -Depth 6 | Out-File -encoding UTF8 $env:ProgramData/Amazon/EC2Launch/config/agent-config.yml
+$setAdminAccount = @"
+{
+  "task": "setAdminAccount",
+  "inputs": {
+    "password": {
+      "type": "static",
+      "data": "%s"
+    }
+  }
+}
+"@
+$config.config | %%{if($_.stage -eq 'preReady'){$_.tasks += (ConvertFrom-Json -InputObject $setAdminAccount)}}
+$config | ConvertTo-Json -Depth 6 | Out-File -encoding UTF8 $env:ProgramData/Amazon/EC2Launch/config/agent-config.yml
+
 # First, make sure WinRM can't be connected to
 netsh advfirewall firewall set rule name="Windows Remote Management (HTTP-In)" new enable=yes action=block
 
@@ -752,7 +769,7 @@
     )
 
     if bootstrap:
-        config['UserData'] = WINDOWS_USER_DATA % password
+        config['UserData'] = WINDOWS_USER_DATA % (password, password)
 
     with temporary_ec2_instances(c.ec2resource, config) as instances:
         wait_for_ip_addresses(instances)
@@ -1173,28 +1190,16 @@
     with INSTALL_WINDOWS_DEPENDENCIES.open('r', encoding='utf-8') as fh:
         commands.extend(l.rstrip() for l in fh)
 
-    # Schedule run of EC2Launch on next boot. This ensures that UserData
-    # is executed.
-    # We disable setComputerName because it forces a reboot.
-    # We set an explicit admin password because this causes UserData to run
-    # as Administrator instead of System.
-    commands.extend(
-        [
-            r'''Set-Content -Path C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json '''
-            r'''-Value '{"setComputerName": false, "setWallpaper": true, "addDnsSuffixList": true, '''
-            r'''"extendBootVolumeSize": true, "handleUserData": true, '''
-            r'''"adminPasswordType": "Specify", "adminPassword": "%s"}' '''
-            % c.automation.default_password(),
-            r'C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 '
-            r'–Schedule',
-        ]
-    )
-
     # Disable Windows Defender when bootstrapping because it just slows
     # things down.
     commands.insert(0, 'Set-MpPreference -DisableRealtimeMonitoring $true')
     commands.append('Set-MpPreference -DisableRealtimeMonitoring $false')
 
+    # Trigger shutdown to prepare for imaging.
+    commands.append(
+        'Stop-Computer -ComputerName localhost',
+    )
+
     # Compute a deterministic fingerprint to determine whether image needs
     # to be regenerated.
     fingerprint = resolve_fingerprint(
--- a/contrib/automation/hgautomation/windows.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/contrib/automation/hgautomation/windows.py	Thu Sep 01 16:51:26 2022 +0200
@@ -45,6 +45,7 @@
 '''.lstrip()
 
 BUILD_INNO_PYTHON3 = r'''
+$Env:PATH = "C:\hgdev\venv-bootstrap\Scripts;$Env:PATH"
 $Env:RUSTUP_HOME = "C:\hgdev\rustup"
 $Env:CARGO_HOME = "C:\hgdev\cargo"
 Set-Location C:\hgdev\src
@@ -56,6 +57,7 @@
 
 
 BUILD_WHEEL = r'''
+$Env:PATH = "C:\hgdev\venv-bootstrap\Scripts;$Env:PATH"
 Set-Location C:\hgdev\src
 C:\hgdev\python{python_version}-{arch}\python.exe -m pip wheel --wheel-dir dist .
 if ($LASTEXITCODE -ne 0) {{
@@ -64,6 +66,7 @@
 '''
 
 BUILD_WIX_PYTHON3 = r'''
+$Env:PATH = "C:\hgdev\venv-bootstrap\Scripts;$Env:PATH"
 $Env:RUSTUP_HOME = "C:\hgdev\rustup"
 $Env:CARGO_HOME = "C:\hgdev\cargo"
 Set-Location C:\hgdev\src
--- a/contrib/automation/requirements.txt	Sun Jun 05 07:16:29 2022 +0200
+++ b/contrib/automation/requirements.txt	Thu Sep 01 16:51:26 2022 +0200
@@ -1,193 +1,267 @@
 #
-# This file is autogenerated by pip-compile
+# This file is autogenerated by pip-compile with python 3.10
 # To update, run:
 #
 #    pip-compile --generate-hashes --output-file=contrib/automation/requirements.txt contrib/automation/requirements.txt.in
 #
-asn1crypto==1.0.1 \
-    --hash=sha256:0b199f211ae690df3db4fd6c1c4ff976497fb1da689193e368eedbadc53d9292 \
-    --hash=sha256:bca90060bd995c3f62c4433168eab407e44bdbdb567b3f3a396a676c1a4c4a3f \
-    # via cryptography
-bcrypt==3.1.7 \
-    --hash=sha256:0258f143f3de96b7c14f762c770f5fc56ccd72f8a1857a451c1cd9a655d9ac89 \
-    --hash=sha256:0b0069c752ec14172c5f78208f1863d7ad6755a6fae6fe76ec2c80d13be41e42 \
-    --hash=sha256:19a4b72a6ae5bb467fea018b825f0a7d917789bcfe893e53f15c92805d187294 \
-    --hash=sha256:5432dd7b34107ae8ed6c10a71b4397f1c853bd39a4d6ffa7e35f40584cffd161 \
-    --hash=sha256:69361315039878c0680be456640f8705d76cb4a3a3fe1e057e0f261b74be4b31 \
-    --hash=sha256:6fe49a60b25b584e2f4ef175b29d3a83ba63b3a4df1b4c0605b826668d1b6be5 \
-    --hash=sha256:74a015102e877d0ccd02cdeaa18b32aa7273746914a6c5d0456dd442cb65b99c \
-    --hash=sha256:763669a367869786bb4c8fcf731f4175775a5b43f070f50f46f0b59da45375d0 \
-    --hash=sha256:8b10acde4e1919d6015e1df86d4c217d3b5b01bb7744c36113ea43d529e1c3de \
-    --hash=sha256:9fe92406c857409b70a38729dbdf6578caf9228de0aef5bc44f859ffe971a39e \
-    --hash=sha256:a190f2a5dbbdbff4b74e3103cef44344bc30e61255beb27310e2aec407766052 \
-    --hash=sha256:a595c12c618119255c90deb4b046e1ca3bcfad64667c43d1166f2b04bc72db09 \
-    --hash=sha256:c9457fa5c121e94a58d6505cadca8bed1c64444b83b3204928a866ca2e599105 \
-    --hash=sha256:cb93f6b2ab0f6853550b74e051d297c27a638719753eb9ff66d1e4072be67133 \
-    --hash=sha256:d7bdc26475679dd073ba0ed2766445bb5b20ca4793ca0db32b399dccc6bc84b7 \
-    --hash=sha256:ff032765bb8716d9387fd5376d987a937254b0619eff0972779515b5c98820bc \
+bcrypt==3.2.2 \
+    --hash=sha256:2b02d6bfc6336d1094276f3f588aa1225a598e27f8e3388f4db9948cb707b521 \
+    --hash=sha256:433c410c2177057705da2a9f2cd01dd157493b2a7ac14c8593a16b3dab6b6bfb \
+    --hash=sha256:4e029cef560967fb0cf4a802bcf4d562d3d6b4b1bf81de5ec1abbe0f1adb027e \
+    --hash=sha256:61bae49580dce88095d669226d5076d0b9d927754cedbdf76c6c9f5099ad6f26 \
+    --hash=sha256:6d2cb9d969bfca5bc08e45864137276e4c3d3d7de2b162171def3d188bf9d34a \
+    --hash=sha256:7180d98a96f00b1050e93f5b0f556e658605dd9f524d0b0e68ae7944673f525e \
+    --hash=sha256:7d9ba2e41e330d2af4af6b1b6ec9e6128e91343d0b4afb9282e54e5508f31baa \
+    --hash=sha256:7ff2069240c6bbe49109fe84ca80508773a904f5a8cb960e02a977f7f519b129 \
+    --hash=sha256:88273d806ab3a50d06bc6a2fc7c87d737dd669b76ad955f449c43095389bc8fb \
+    --hash=sha256:a2c46100e315c3a5b90fdc53e429c006c5f962529bc27e1dfd656292c20ccc40 \
+    --hash=sha256:cd43303d6b8a165c29ec6756afd169faba9396a9472cdff753fe9f19b96ce2fa
     # via paramiko
-bleach==3.1.0 \
-    --hash=sha256:213336e49e102af26d9cde77dd2d0397afabc5a6bf2fed985dc35b5d1e285a16 \
-    --hash=sha256:3fdf7f77adcf649c9911387df51254b813185e32b2c6619f690b593a617e19fa \
+bleach==5.0.0 \
+    --hash=sha256:08a1fe86d253b5c88c92cc3d810fd8048a16d15762e1e5b74d502256e5926aa1 \
+    --hash=sha256:c6d6cc054bdc9c83b48b8083e236e5f00f238428666d2ce2e083eaa5fd568565
     # via readme-renderer
-boto3==1.9.243 \
-    --hash=sha256:404acbecef8f4912f18312fcfaffe7eba7f10b3b7adf7853bdba59cdf2275ebb \
-    --hash=sha256:c6e5a7e4548ce7586c354ff633f2a66ba3c471d15a8ae6a30f873122ab04e1cf
-botocore==1.12.243 \
-    --hash=sha256:397585a7881230274afb8d1877ef69a661b0a311745cd324f14a052fb2a2863a \
-    --hash=sha256:4496f8da89cb496462a831897ad248e13e431d9fa7e41e06d426fd6658ab6e59 \
-    # via boto3, s3transfer
-certifi==2021.5.30 \
-    --hash=sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee \
-    --hash=sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8 \
+boto3==1.22.7 \
+    --hash=sha256:4dc0df36c3465ff0d586017da68b0152123695f38f30ad98fed7185e59298d2c \
+    --hash=sha256:de4fa49ca1cbc93313144e93e6d0997cbb61c8cca91f3418b4e3646dc215f441
+    # via -r contrib/automation/requirements.txt.in
+botocore==1.25.7 \
+    --hash=sha256:190361776d96323ff401b976175f76172acf7ebbe3efbb19c4c6f9800a9ad6b6 \
+    --hash=sha256:83da857c12fff5cf4c1a64afaa72a28ff5bef929a2834ec4ed5b0b674f88fd0e
+    # via
+    #   boto3
+    #   s3transfer
+certifi==2021.10.8 \
+    --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \
+    --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569
     # via requests
-cffi==1.12.3 \
-    --hash=sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774 \
-    --hash=sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d \
-    --hash=sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90 \
-    --hash=sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b \
-    --hash=sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63 \
-    --hash=sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45 \
-    --hash=sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25 \
-    --hash=sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3 \
-    --hash=sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b \
-    --hash=sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647 \
-    --hash=sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016 \
-    --hash=sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4 \
-    --hash=sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb \
-    --hash=sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753 \
-    --hash=sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7 \
-    --hash=sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9 \
-    --hash=sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f \
-    --hash=sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8 \
-    --hash=sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f \
-    --hash=sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc \
-    --hash=sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42 \
-    --hash=sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3 \
-    --hash=sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909 \
-    --hash=sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45 \
-    --hash=sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d \
-    --hash=sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512 \
-    --hash=sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff \
-    --hash=sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201 \
-    # via bcrypt, cryptography, pynacl
-chardet==3.0.4 \
-    --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \
-    --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \
+cffi==1.15.0 \
+    --hash=sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3 \
+    --hash=sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2 \
+    --hash=sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636 \
+    --hash=sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20 \
+    --hash=sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728 \
+    --hash=sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27 \
+    --hash=sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66 \
+    --hash=sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443 \
+    --hash=sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0 \
+    --hash=sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7 \
+    --hash=sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39 \
+    --hash=sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605 \
+    --hash=sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a \
+    --hash=sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37 \
+    --hash=sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029 \
+    --hash=sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139 \
+    --hash=sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc \
+    --hash=sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df \
+    --hash=sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14 \
+    --hash=sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880 \
+    --hash=sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2 \
+    --hash=sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a \
+    --hash=sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e \
+    --hash=sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474 \
+    --hash=sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024 \
+    --hash=sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8 \
+    --hash=sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0 \
+    --hash=sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e \
+    --hash=sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a \
+    --hash=sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e \
+    --hash=sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032 \
+    --hash=sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6 \
+    --hash=sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e \
+    --hash=sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b \
+    --hash=sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e \
+    --hash=sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954 \
+    --hash=sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962 \
+    --hash=sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c \
+    --hash=sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4 \
+    --hash=sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55 \
+    --hash=sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962 \
+    --hash=sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023 \
+    --hash=sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c \
+    --hash=sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6 \
+    --hash=sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8 \
+    --hash=sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382 \
+    --hash=sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7 \
+    --hash=sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc \
+    --hash=sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997 \
+    --hash=sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796
+    # via
+    #   bcrypt
+    #   cryptography
+    #   pynacl
+charset-normalizer==2.0.12 \
+    --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \
+    --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df
     # via requests
-cryptography==2.7 \
-    --hash=sha256:24b61e5fcb506424d3ec4e18bca995833839bf13c59fc43e530e488f28d46b8c \
-    --hash=sha256:25dd1581a183e9e7a806fe0543f485103232f940fcfc301db65e630512cce643 \
-    --hash=sha256:3452bba7c21c69f2df772762be0066c7ed5dc65df494a1d53a58b683a83e1216 \
-    --hash=sha256:41a0be220dd1ed9e998f5891948306eb8c812b512dc398e5a01846d855050799 \
-    --hash=sha256:5751d8a11b956fbfa314f6553d186b94aa70fdb03d8a4d4f1c82dcacf0cbe28a \
-    --hash=sha256:5f61c7d749048fa6e3322258b4263463bfccefecb0dd731b6561cb617a1d9bb9 \
-    --hash=sha256:72e24c521fa2106f19623a3851e9f89ddfdeb9ac63871c7643790f872a305dfc \
-    --hash=sha256:7b97ae6ef5cba2e3bb14256625423413d5ce8d1abb91d4f29b6d1a081da765f8 \
-    --hash=sha256:961e886d8a3590fd2c723cf07be14e2a91cf53c25f02435c04d39e90780e3b53 \
-    --hash=sha256:96d8473848e984184b6728e2c9d391482008646276c3ff084a1bd89e15ff53a1 \
-    --hash=sha256:ae536da50c7ad1e002c3eee101871d93abdc90d9c5f651818450a0d3af718609 \
-    --hash=sha256:b0db0cecf396033abb4a93c95d1602f268b3a68bb0a9cc06a7cff587bb9a7292 \
-    --hash=sha256:cfee9164954c186b191b91d4193989ca994703b2fff406f71cf454a2d3c7327e \
-    --hash=sha256:e6347742ac8f35ded4a46ff835c60e68c22a536a8ae5c4422966d06946b6d4c6 \
-    --hash=sha256:f27d93f0139a3c056172ebb5d4f9056e770fdf0206c2f422ff2ebbad142e09ed \
-    --hash=sha256:f57b76e46a58b63d1c6375017f4564a28f19a5ca912691fd2e4261b3414b618d \
-    # via paramiko, pypsrp
-docutils==0.15.2 \
-    --hash=sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0 \
-    --hash=sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827 \
-    --hash=sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 \
-    # via botocore, readme-renderer
-idna==2.8 \
-    --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \
-    --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \
+commonmark==0.9.1 \
+    --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \
+    --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9
+    # via rich
+cryptography==37.0.2 \
+    --hash=sha256:093cb351031656d3ee2f4fa1be579a8c69c754cf874206be1d4cf3b542042804 \
+    --hash=sha256:0cc20f655157d4cfc7bada909dc5cc228211b075ba8407c46467f63597c78178 \
+    --hash=sha256:1b9362d34363f2c71b7853f6251219298124aa4cc2075ae2932e64c91a3e2717 \
+    --hash=sha256:1f3bfbd611db5cb58ca82f3deb35e83af34bb8cf06043fa61500157d50a70982 \
+    --hash=sha256:2bd1096476aaac820426239ab534b636c77d71af66c547b9ddcd76eb9c79e004 \
+    --hash=sha256:31fe38d14d2e5f787e0aecef831457da6cec68e0bb09a35835b0b44ae8b988fe \
+    --hash=sha256:3b8398b3d0efc420e777c40c16764d6870bcef2eb383df9c6dbb9ffe12c64452 \
+    --hash=sha256:3c81599befb4d4f3d7648ed3217e00d21a9341a9a688ecdd615ff72ffbed7336 \
+    --hash=sha256:419c57d7b63f5ec38b1199a9521d77d7d1754eb97827bbb773162073ccd8c8d4 \
+    --hash=sha256:46f4c544f6557a2fefa7ac8ac7d1b17bf9b647bd20b16decc8fbcab7117fbc15 \
+    --hash=sha256:471e0d70201c069f74c837983189949aa0d24bb2d751b57e26e3761f2f782b8d \
+    --hash=sha256:59b281eab51e1b6b6afa525af2bd93c16d49358404f814fe2c2410058623928c \
+    --hash=sha256:731c8abd27693323b348518ed0e0705713a36d79fdbd969ad968fbef0979a7e0 \
+    --hash=sha256:95e590dd70642eb2079d280420a888190aa040ad20f19ec8c6e097e38aa29e06 \
+    --hash=sha256:a68254dd88021f24a68b613d8c51d5c5e74d735878b9e32cc0adf19d1f10aaf9 \
+    --hash=sha256:a7d5137e556cc0ea418dca6186deabe9129cee318618eb1ffecbd35bee55ddc1 \
+    --hash=sha256:aeaba7b5e756ea52c8861c133c596afe93dd716cbcacae23b80bc238202dc023 \
+    --hash=sha256:dc26bb134452081859aa21d4990474ddb7e863aa39e60d1592800a8865a702de \
+    --hash=sha256:e53258e69874a306fcecb88b7534d61820db8a98655662a3dd2ec7f1afd9132f \
+    --hash=sha256:ef15c2df7656763b4ff20a9bc4381d8352e6640cfeb95c2972c38ef508e75181 \
+    --hash=sha256:f224ad253cc9cea7568f49077007d2263efa57396a2f2f78114066fd54b5c68e \
+    --hash=sha256:f8ec91983e638a9bcd75b39f1396e5c0dc2330cbd9ce4accefe68717e6779e0a
+    # via
+    #   paramiko
+    #   pypsrp
+    #   pyspnego
+    #   secretstorage
+docutils==0.18.1 \
+    --hash=sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c \
+    --hash=sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06
+    # via readme-renderer
+idna==3.3 \
+    --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
+    --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d
     # via requests
-jmespath==0.9.4 \
-    --hash=sha256:3720a4b1bd659dd2eecad0666459b9788813e032b83e7ba58578e48254e0a0e6 \
-    --hash=sha256:bde2aef6f44302dfb30320115b17d030798de8c4110e28d5cf6cf91a7a31074c \
-    # via boto3, botocore
-ntlm-auth==1.4.0 \
-    --hash=sha256:11f7a3cec38155b7cecdd9bbc8c37cd738d8012f0523b3f98d8caefe394feb97 \
-    --hash=sha256:350f2389c8ee5517f47db55a36ac2f8efc9742a60a678d6e2caa92385bdcaa9a \
+importlib-metadata==4.11.3 \
+    --hash=sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6 \
+    --hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
+    # via
+    #   keyring
+    #   twine
+jeepney==0.8.0 \
+    --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \
+    --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755
+    # via
+    #   keyring
+    #   secretstorage
+jmespath==1.0.0 \
+    --hash=sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e \
+    --hash=sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04
+    # via
+    #   boto3
+    #   botocore
+keyring==23.5.0 \
+    --hash=sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9 \
+    --hash=sha256:b0d28928ac3ec8e42ef4cc227822647a19f1d544f21f96457965dc01cf555261
+    # via twine
+paramiko==2.10.4 \
+    --hash=sha256:3c9ed6084f4b671ab66dc3c729092d32d96c3258f1426071301cb33654b09027 \
+    --hash=sha256:3d2e650b6812ce6d160abff701d6ef4434ec97934b13e95cf1ad3da70ffb5c58
+    # via -r contrib/automation/requirements.txt.in
+pkginfo==1.8.2 \
+    --hash=sha256:542e0d0b6750e2e21c20179803e40ab50598d8066d51097a0e382cba9eb02bff \
+    --hash=sha256:c24c487c6a7f72c66e816ab1796b96ac6c3d14d49338293d2141664330b55ffc
+    # via twine
+pycparser==2.21 \
+    --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
+    --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
+    # via cffi
+pygments==2.12.0 \
+    --hash=sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb \
+    --hash=sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519
+    # via
+    #   readme-renderer
+    #   rich
+pynacl==1.5.0 \
+    --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \
+    --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \
+    --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93 \
+    --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \
+    --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \
+    --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \
+    --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \
+    --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \
+    --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \
+    --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543
+    # via paramiko
+pypsrp==0.8.1 \
+    --hash=sha256:0101345ceb415896fed9b056e7b77d65312089ddc73c4286247ccf1859d4bc4d \
+    --hash=sha256:f5500acd11dfe742d51b7fbb61321ba721038a300d67763dc52babe709db65e7
+    # via -r contrib/automation/requirements.txt.in
+pyspnego==0.5.2 \
+    --hash=sha256:1fed228edc4b1730844da8237b90489be28c55681cf3934cd04fceb2253e55bf \
+    --hash=sha256:25fbc90fc6bd16881480316739bab820cc91364765e46340da17f861f89691f1 \
+    --hash=sha256:274b3a2d37e45ad4567bc5754be04b5fefad3f7cdea7d205f739d8a26b5a9189 \
+    --hash=sha256:36db7ec38023a23a545114dfd23825639571f135c72fb4b13a1ed559a0a4d93c \
+    --hash=sha256:3b1ff3c1d5588b66f8e4ebafa3079a7bf0bdcc6fb144b944c5a101e688a5a280 \
+    --hash=sha256:4b9bda51bd964f40322aa1b33dcfc5d68f23b0680b4b5158175f2e9a04119aa9 \
+    --hash=sha256:5d6d91e35ee63a5de30eb70716bf25274bf16c2c472b046dd21fad60fe63b0b6 \
+    --hash=sha256:7562bc640bf402bb2849f325b0bb41260bd2c0cb06e38b9a8c6f7021b452c873 \
+    --hash=sha256:9c5bdb9f0207e2ce9e5410ee2205bf016755712018534c711ae6c1daff7fa7db \
+    --hash=sha256:a5c135d20819db3c48f65054d648317f369a61b7b22dc17b9e5ec9c0169541a0 \
+    --hash=sha256:bd95633e7dce69e267579bdbe992fc081a14310236b4e84c3d179b1cf6439ca5 \
+    --hash=sha256:eb41b970dbda0dfe07b1da6fc83fe9f534a66d8dea38c06c0155377697407d9a
     # via pypsrp
-paramiko==2.6.0 \
-    --hash=sha256:99f0179bdc176281d21961a003ffdb2ec369daac1a1007241f53374e376576cf \
-    --hash=sha256:f4b2edfa0d226b70bd4ca31ea7e389325990283da23465d572ed1f70a7583041
-pkginfo==1.5.0.1 \
-    --hash=sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb \
-    --hash=sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32 \
+python-dateutil==2.8.2 \
+    --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
+    --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
+    # via botocore
+readme-renderer==35.0 \
+    --hash=sha256:73b84905d091c31f36e50b4ae05ae2acead661f6a09a9abb4df7d2ddcdb6a698 \
+    --hash=sha256:a727999acfc222fc21d82a12ed48c957c4989785e5865807c65a487d21677497
     # via twine
-pycparser==2.19 \
-    --hash=sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3 \
-    # via cffi
-pygments==2.4.2 \
-    --hash=sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127 \
-    --hash=sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297 \
-    # via readme-renderer
-pynacl==1.3.0 \
-    --hash=sha256:05c26f93964373fc0abe332676cb6735f0ecad27711035b9472751faa8521255 \
-    --hash=sha256:0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c \
-    --hash=sha256:0d0a8171a68edf51add1e73d2159c4bc19fc0718e79dec51166e940856c2f28e \
-    --hash=sha256:1c780712b206317a746ace34c209b8c29dbfd841dfbc02aa27f2084dd3db77ae \
-    --hash=sha256:2424c8b9f41aa65bbdbd7a64e73a7450ebb4aa9ddedc6a081e7afcc4c97f7621 \
-    --hash=sha256:2d23c04e8d709444220557ae48ed01f3f1086439f12dbf11976e849a4926db56 \
-    --hash=sha256:30f36a9c70450c7878053fa1344aca0145fd47d845270b43a7ee9192a051bf39 \
-    --hash=sha256:37aa336a317209f1bb099ad177fef0da45be36a2aa664507c5d72015f956c310 \
-    --hash=sha256:4943decfc5b905748f0756fdd99d4f9498d7064815c4cf3643820c9028b711d1 \
-    --hash=sha256:57ef38a65056e7800859e5ba9e6091053cd06e1038983016effaffe0efcd594a \
-    --hash=sha256:5bd61e9b44c543016ce1f6aef48606280e45f892a928ca7068fba30021e9b786 \
-    --hash=sha256:6482d3017a0c0327a49dddc8bd1074cc730d45db2ccb09c3bac1f8f32d1eb61b \
-    --hash=sha256:7d3ce02c0784b7cbcc771a2da6ea51f87e8716004512493a2b69016326301c3b \
-    --hash=sha256:a14e499c0f5955dcc3991f785f3f8e2130ed504fa3a7f44009ff458ad6bdd17f \
-    --hash=sha256:a39f54ccbcd2757d1d63b0ec00a00980c0b382c62865b61a505163943624ab20 \
-    --hash=sha256:aabb0c5232910a20eec8563503c153a8e78bbf5459490c49ab31f6adf3f3a415 \
-    --hash=sha256:bd4ecb473a96ad0f90c20acba4f0bf0df91a4e03a1f4dd6a4bdc9ca75aa3a715 \
-    --hash=sha256:e2da3c13307eac601f3de04887624939aca8ee3c9488a0bb0eca4fb9401fc6b1 \
-    --hash=sha256:f67814c38162f4deb31f68d590771a29d5ae3b1bd64b75cf232308e5c74777e0 \
-    # via paramiko
-pypsrp==0.4.0 \
-    --hash=sha256:64b5bdd725a9744c821483b05ecd266f6417f4c6e90ee961a08838480f7d025e \
-    --hash=sha256:f42919247fb80f7dc24c552560d7c24e754d15326030c9e3b7b94f51cfa4dc69
-python-dateutil==2.8.0 \
-    --hash=sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb \
-    --hash=sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e \
-    # via botocore
-readme-renderer==24.0 \
-    --hash=sha256:bb16f55b259f27f75f640acf5e00cf897845a8b3e4731b5c1a436e4b8529202f \
-    --hash=sha256:c8532b79afc0375a85f10433eca157d6b50f7d6990f337fa498c96cd4bfc203d \
-    # via twine
+requests==2.27.1 \
+    --hash=sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61 \
+    --hash=sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d
+    # via
+    #   pypsrp
+    #   requests-toolbelt
+    #   twine
 requests-toolbelt==0.9.1 \
     --hash=sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f \
-    --hash=sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0 \
+    --hash=sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0
+    # via twine
+rfc3986==2.0.0 \
+    --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \
+    --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c
     # via twine
-requests==2.22.0 \
-    --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \
-    --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 \
-    # via pypsrp, requests-toolbelt, twine
-s3transfer==0.2.1 \
-    --hash=sha256:6efc926738a3cd576c2a79725fed9afde92378aa5c6a957e3af010cb019fac9d \
-    --hash=sha256:b780f2411b824cb541dbcd2c713d0cb61c7d1bcadae204cdddda2b35cef493ba \
+rich==12.3.0 \
+    --hash=sha256:0eb63013630c6ee1237e0e395d51cb23513de6b5531235e33889e8842bdf3a6f \
+    --hash=sha256:7e8700cda776337036a712ff0495b04052fb5f957c7dfb8df997f88350044b64
+    # via twine
+s3transfer==0.5.2 \
+    --hash=sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971 \
+    --hash=sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed
     # via boto3
-six==1.12.0 \
-    --hash=sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c \
-    --hash=sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73 \
-    # via bcrypt, bleach, cryptography, pynacl, pypsrp, python-dateutil, readme-renderer
-tqdm==4.36.1 \
-    --hash=sha256:abc25d0ce2397d070ef07d8c7e706aede7920da163c64997585d42d3537ece3d \
-    --hash=sha256:dd3fcca8488bb1d416aa7469d2f277902f26260c45aa86b667b074cd44b3b115 \
-    # via twine
-twine==2.0.0 \
-    --hash=sha256:5319dd3e02ac73fcddcd94f035b9631589ab5d23e1f4699d57365199d85261e1 \
-    --hash=sha256:9fe7091715c7576df166df8ef6654e61bada39571783f2fd415bdcba867c6993
-urllib3==1.25.6 \
-    --hash=sha256:3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398 \
-    --hash=sha256:9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86 \
-    # via botocore, requests
+secretstorage==3.3.2 \
+    --hash=sha256:0a8eb9645b320881c222e827c26f4cfcf55363e8b374a021981ef886657a912f \
+    --hash=sha256:755dc845b6ad76dcbcbc07ea3da75ae54bb1ea529eb72d15f83d26499a5df319
+    # via keyring
+six==1.16.0 \
+    --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
+    --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
+    # via
+    #   bleach
+    #   paramiko
+    #   python-dateutil
+twine==4.0.0 \
+    --hash=sha256:6f7496cf14a3a8903474552d5271c79c71916519edb42554f23f42a8563498a9 \
+    --hash=sha256:817aa0c0bdc02a5ebe32051e168e23c71a0608334e624c793011f120dbbc05b7
+    # via -r contrib/automation/requirements.txt.in
+urllib3==1.26.9 \
+    --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
+    --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e
+    # via
+    #   botocore
+    #   requests
+    #   twine
 webencodings==0.5.1 \
     --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
-    --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 \
+    --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
     # via bleach
-
-# WARNING: The following packages were not pinned, but pip requires them to be
-# pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag.
-# setuptools==41.2.0        # via twine
+zipp==3.8.0 \
+    --hash=sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad \
+    --hash=sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099
+    # via importlib-metadata
--- a/contrib/install-windows-dependencies.ps1	Sun Jun 05 07:16:29 2022 +0200
+++ b/contrib/install-windows-dependencies.ps1	Thu Sep 01 16:51:26 2022 +0200
@@ -49,9 +49,9 @@
 $MINGW_BIN_URL = "https://osdn.net/frs/redir.php?m=constant&f=mingw%2F68260%2Fmingw-get-0.6.3-mingw32-pre-20170905-1-bin.zip"
 $MINGW_BIN_SHA256 = "2AB8EFD7C7D1FC8EAF8B2FA4DA4EEF8F3E47768284C021599BC7435839A046DF"
 
-$MERCURIAL_WHEEL_FILENAME = "mercurial-5.8.1-cp39-cp39-win_amd64.whl"
-$MERCURIAL_WHEEL_URL = "https://files.pythonhosted.org/packages/5c/b5/a5fa664761eef29b6c90eb24cb09ab8fe2c9b4b86af41d42c17476aff29b/$MERCURIAL_WHEEL_FILENAME"
-$MERCURIAL_WHEEL_SHA256 = "cbf3efa68fd7ebf94691bd00d2c86bbd47ca73620c8faa4f18b6c394bf5f82b0"
+$MERCURIAL_WHEEL_FILENAME = "mercurial-6.1.4-cp39-cp39-win_amd64.whl"
+$MERCURIAL_WHEEL_URL = "https://files.pythonhosted.org/packages/82/86/fbcc4b552f6c1bdfdbbc5a68b0896a55ac3c6c0e8baf51394816bdc320bd/$MERCURIAL_WHEEL_FILENAME"
+$MERCURIAL_WHEEL_SHA256 = "ab578daec7c21786c668b0da2e71282a290d18010255719f78d0e55145020d46"
 
 $RUSTUP_INIT_URL = "https://static.rust-lang.org/rustup/archive/1.21.1/x86_64-pc-windows-gnu/rustup-init.exe"
 $RUSTUP_INIT_SHA256 = "d17df34ba974b9b19cf5c75883a95475aa22ddc364591d75d174090d55711c72"
--- a/contrib/packaging/requirements-windows-py3.txt	Sun Jun 05 07:16:29 2022 +0200
+++ b/contrib/packaging/requirements-windows-py3.txt	Thu Sep 01 16:51:26 2022 +0200
@@ -80,20 +80,28 @@
     --hash=sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af \
     --hash=sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc
     # via -r contrib/packaging/requirements-windows.txt.in
-dulwich==0.20.6 ; python_version >= "3" \
-    --hash=sha256:1ccd55e38fa9f169290f93e027ab4508202f5bdd6ef534facac4edd3f6903f0d \
-    --hash=sha256:2452a0379cc7bbbd7ab893ec104d18039f1ea98b0d6be6bca5646e5cf29e0ae9 \
-    --hash=sha256:2f4aebc54ed2d37dcee737024421452375570a422eb682232e676aa7ebc9cb4b \
-    --hash=sha256:304f52b10c49c3a6ddfbd73e2e93d8e979350225cfba9688e51110e74fa2f718 \
-    --hash=sha256:49e747c72d9099e873bf6196260346d5996c3f28af788294d47a8accdc524de7 \
-    --hash=sha256:4fee359928c59b53af153a582a7ed7595259a5a825df400301a29e17fd78dfd3 \
-    --hash=sha256:50ef300a9fa4efd9f85009c2bd8b515266ec1529400f8834f85c04fa9f09b2c0 \
-    --hash=sha256:5348310f21b2a23847342ce464461499b6652483fa42de03714d0f6421a99698 \
-    --hash=sha256:7e7b5dea5178b6493fdb83adccbe81de9ddff55f79880185ed594c0e3a97209b \
-    --hash=sha256:8f7a7f973be2beedfb10dd8d3eb6bdf9ec466c72ad555704897cbd6357fe5021 \
-    --hash=sha256:bea6e6caffc6c73bfd1647714c5715ab96ac49deb8beb8b67511529afa25685a \
-    --hash=sha256:e5871b86a079e9e290f52ab14559cea1b694a0b8ed2b9ebb898f6ced7f14a406 \
-    --hash=sha256:e593f514b8ac740b4ceeb047745b4719bfc9f334904245c6edcb3a9d002f577b
+dulwich==0.20.45 \
+    --hash=sha256:042bc206764968b17338e32c52bb6a116154eb87a63651971946917dfa37a359 \
+    --hash=sha256:22d433ba9c776f2b0e19b1186e01e25ca286175e20f4ac422141db94eeaac08b \
+    --hash=sha256:2d7cf5171034d9d61b928bd5f9c509000e895d1ba29bd6ea850b9e4f93fca0f7 \
+    --hash=sha256:3136bcaf7508522a2aa63f856743f06129261bc5a03331aa6a0654fa6d04a4ae \
+    --hash=sha256:35015e43207752cf7924860e85a3c2290c652c0c3ee81e7c95c52d34638f605d \
+    --hash=sha256:3f2c137a0003e80e384d116e65b453f8a704c2d393c30a47b447764e7f9c05a1 \
+    --hash=sha256:49852f12c1e1d50039f927e9fdee1bd00a9b428c31b078ba5ba9fc1cf88e9d3e \
+    --hash=sha256:4abb1b0e1e50192ce7204c4e14f24c989c5920c56de908365f4e66c6e3458945 \
+    --hash=sha256:4e405ac9426288ca782c45e066f816d878b4a529acf4d4b0b2a5bb45a804dfec \
+    --hash=sha256:5e41044ac51a4b3454d67e5f691808540470deeb6a852d7c5c6ca44c48b4cdc3 \
+    --hash=sha256:65334bd7a1d91054516a49f86343e9c2549740bbddebcbb4763c8aacf2aac48c \
+    --hash=sha256:6e02babb44bdad17b6c9c50b4f9df42f6e511e3a51555ac07dd85ec904efe0b1 \
+    --hash=sha256:70710dd9ca2a442190c7e506892db074c318ac762e221f7529b8ce34802041b7 \
+    --hash=sha256:9b689b05bc7baa5cb20ebff54291085b598a9bdf7caeab23daf93b46421d96ff \
+    --hash=sha256:b3f64870f2f206dda3308cb73563f5f59fdc084179271651a0488d12ab4185b9 \
+    --hash=sha256:bb75268cec2f3ae6f6b7addbc0db50db2e9e42b2ad8364e74b9f5b17ab0053b5 \
+    --hash=sha256:c8c0fc7d2e3b0ad6a4faadf96f0626fa50935ababfd774b9b94edaa28f0668ec \
+    --hash=sha256:d89f53a739ac3394b5ef2f178480569b7d36d4fe7b4bb49678582914530ce35b \
+    --hash=sha256:d8b6aae7af8edbfac8038e1777ae820efac33c7c22a8025d3254bbd53ec725b5 \
+    --hash=sha256:eb4189d72a0e2f3070e2abdbd10a05c0e62355cd5496761d6e68f1e865ac6fad \
+    --hash=sha256:efe46167eb02ba85d9c2e993635e7543e1e04bb3261112e9d54daff2385ae5df
     # via -r contrib/packaging/requirements-windows.txt.in
 fuzzywuzzy==0.18.0 \
     --hash=sha256:45016e92264780e58972dca1b3d939ac864b78437422beecebb3095f8efd00e8
@@ -113,9 +121,9 @@
     --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \
     --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32
     # via pytest
-keyring==21.4.0 \
-    --hash=sha256:4e34ea2fdec90c1c43d6610b5a5fafa1b9097db1802948e90caf5763974b8f8d \
-    --hash=sha256:9aeadd006a852b78f4b4ef7c7556c2774d2432bbef8ee538a3e9089ac8b11466
+keyring==22.3.0 \
+    --hash=sha256:16927a444b2c73f983520a48dec79ddab49fe76429ea05b8d528d778c8339522 \
+    --hash=sha256:2bc8363ebdd63886126a012057a85c8cb6e143877afa02619ac7dbc9f38a207b
     # via -r contrib/packaging/requirements-windows.txt.in
 multidict==5.1.0 \
     --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \
@@ -172,7 +180,7 @@
     --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
     --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
     # via cffi
-pygit2==1.7.1 ; python_version >= "3" \
+pygit2==1.7.1 \
     --hash=sha256:2c9e95efb86c0b32cc07c26be3d179e851ca4a7899c47fef63c4203963144f5e \
     --hash=sha256:3ddacbf461652d3d4900382f821d9fbd5ae2dedecd7862b5245842419ad0ccba \
     --hash=sha256:4cb0414df6089d0072ebe93ff2f34730737172dd5f0e72289567d06a6caf09c0 \
--- a/hgext/fsmonitor/__init__.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/hgext/fsmonitor/__init__.py	Thu Sep 01 16:51:26 2022 +0200
@@ -117,6 +117,7 @@
 
 from mercurial.i18n import _
 from mercurial.node import hex
+
 from mercurial.pycompat import open
 from mercurial import (
     context,
@@ -131,6 +132,9 @@
     scmutil,
     util,
 )
+
+# no-check-code because we're accessing private information only public in pure
+from mercurial.pure import parsers
 from mercurial import match as matchmod
 from mercurial.utils import (
     hashutil,
@@ -332,10 +336,22 @@
         # for better performance, directly access the inner dirstate map if the
         # standard dirstate implementation is in use.
         dmap = dmap._map
+
+    has_mtime = parsers.DIRSTATE_V2_HAS_MTIME
+    mtime_is_ambiguous = parsers.DIRSTATE_V2_MTIME_SECOND_AMBIGUOUS
+    mask = has_mtime | mtime_is_ambiguous
+
+    # All entries that may not be clean
     nonnormalset = {
         f
         for f, e in self._map.items()
-        if e._v1_state() != b"n" or e._v1_mtime() == -1
+        if not e.maybe_clean
+        # same as "not has_time or has_ambiguous_time", but factored to only
+        # need a single access to flags for performance.
+        # `mask` removes all irrelevant bits, then we flip the `mtime` bit so
+        # its `true` value is NOT having a mtime, then check if either bit
+        # is set.
+        or bool((e.v2_data()[0] & mask) ^ has_mtime)
     }
 
     copymap = self._map.copymap
--- a/hgext/git/__init__.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/hgext/git/__init__.py	Thu Sep 01 16:51:26 2022 +0200
@@ -204,7 +204,9 @@
 
     @active.setter
     def active(self, mark):
-        githead = mark is not None and (_BMS_PREFIX + mark) or None
+        githead = None
+        if mark is not None:
+            githead = _BMS_PREFIX + pycompat.fsdecode(mark)
         if githead is not None and githead not in self.gitrepo.references:
             raise AssertionError(b'bookmark %s does not exist!' % mark)
 
@@ -254,7 +256,7 @@
                 )
 
     def checkconflict(self, mark, force=False, target=None):
-        githead = _BMS_PREFIX + mark
+        githead = _BMS_PREFIX + pycompat.fsdecode(mark)
         cur = self.gitrepo.references['HEAD']
         if githead in self.gitrepo.references and not force:
             if target:
--- a/hgext/git/dirstate.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/hgext/git/dirstate.py	Thu Sep 01 16:51:26 2022 +0200
@@ -330,7 +330,8 @@
         # TODO: figure out a strategy for saving index backups.
         pass
 
-    def set_tracked(self, f):
+    def set_tracked(self, f, reset_copy=False):
+        # TODO: support copies and reset_copy=True
         uf = pycompat.fsdecode(f)
         if uf in self.git.index:
             return False
--- a/hgext/git/gitlog.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/hgext/git/gitlog.py	Thu Sep 01 16:51:26 2022 +0200
@@ -282,6 +282,30 @@
 
         return ancestor.incrementalmissingancestors(self.parentrevs, common)
 
+    def findmissingrevs(self, common=None, heads=None):
+        """Return the revision numbers of the ancestors of heads that
+        are not ancestors of common.
+
+        More specifically, return a list of revision numbers corresponding to
+        nodes N such that every N satisfies the following constraints:
+
+          1. N is an ancestor of some node in 'heads'
+          2. N is not an ancestor of any node in 'common'
+
+        The list is sorted by revision number, meaning it is
+        topologically sorted.
+
+        'heads' and 'common' are both lists of revision numbers.  If heads is
+        not supplied, uses all of the revlog's heads.  If common is not
+        supplied, uses nullid."""
+        if common is None:
+            common = [nullrev]
+        if heads is None:
+            heads = self.headrevs()
+
+        inc = self.incrementalmissingrevs(common=common)
+        return inc.missingancestors(heads)
+
     def findmissing(self, common=None, heads=None):
         """Return the ancestors of heads that are not ancestors of common.
 
--- a/mercurial/debugcommands.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/mercurial/debugcommands.py	Thu Sep 01 16:51:26 2022 +0200
@@ -1185,10 +1185,10 @@
     """runs the changeset discovery protocol in isolation
 
     The local peer can be "replaced" by a subset of the local repository by
-    using the `--local-as-revs` flag. Int he same way, usual `remote` peer can
-    be "replaced" by a subset of the local repository using the
-    `--local-as-revs` flag. This is useful to efficiently debug pathological
-    discovery situation.
+    using the `--local-as-revs` flag. In the same way, the usual `remote` peer
+    can be "replaced" by a subset of the local repository using the
+    `--remote-as-revs` flag. This is useful to efficiently debug pathological
+    discovery situations.
 
     The following developer oriented config are relevant for people playing with this command:
 
@@ -1276,6 +1276,9 @@
             if not util.safehasattr(remote, b'branches'):
                 # enable in-client legacy support
                 remote = localrepo.locallegacypeer(remote.local())
+                if remote_revs:
+                    r = remote._repo.filtered(b'debug-discovery-remote-filter')
+                    remote._repo = r
             common, _in, hds = treediscovery.findcommonincoming(
                 repo, remote, force=True, audit=data
             )
@@ -1299,7 +1302,12 @@
                 revs = logcmdutil.revrange(repo, pushedrevs)
                 nodes = [repo[r].node() for r in revs]
             common, any, hds = setdiscovery.findcommonheads(
-                ui, repo, remote, ancestorsof=nodes, audit=data
+                ui,
+                repo,
+                remote,
+                ancestorsof=nodes,
+                audit=data,
+                abortwhenunrelated=False,
             )
             return common, hds
 
@@ -1322,6 +1330,8 @@
             common, hds = doit(localrevs, remoterevs)
 
     # compute all statistics
+    if len(common) == 1 and repo.nullid in common:
+        common = set()
     heads_common = set(common)
     heads_remote = set(hds)
     heads_local = set(repo.heads())
@@ -1375,7 +1385,24 @@
     # display discovery summary
     fm.plain(b"elapsed time:  %(elapsed)f seconds\n" % data)
     fm.plain(b"round-trips:           %(total-roundtrips)9d\n" % data)
+    if b'total-round-trips-heads' in data:
+        fm.plain(
+            b"  round-trips-heads:    %(total-round-trips-heads)9d\n" % data
+        )
+    if b'total-round-trips-branches' in data:
+        fm.plain(
+            b"  round-trips-branches:    %(total-round-trips-branches)9d\n"
+            % data
+        )
+    if b'total-round-trips-between' in data:
+        fm.plain(
+            b"  round-trips-between:    %(total-round-trips-between)9d\n" % data
+        )
     fm.plain(b"queries:               %(total-queries)9d\n" % data)
+    if b'total-queries-branches' in data:
+        fm.plain(b"  queries-branches:    %(total-queries-branches)9d\n" % data)
+    if b'total-queries-between' in data:
+        fm.plain(b"  queries-between:     %(total-queries-between)9d\n" % data)
     fm.plain(b"heads summary:\n")
     fm.plain(b"  total common heads:  %(nb-common-heads)9d\n" % data)
     fm.plain(b"    also local heads:  %(nb-common-heads-local)9d\n" % data)
--- a/mercurial/dirstate.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/mercurial/dirstate.py	Thu Sep 01 16:51:26 2022 +0200
@@ -31,6 +31,7 @@
 )
 
 from .dirstateutils import (
+    docket as docketmod,
     timestamp,
 )
 
@@ -1433,6 +1434,27 @@
         else:
             return self._filename
 
+    def data_backup_filename(self, backupname):
+        if not self._use_dirstate_v2:
+            return None
+        return backupname + b'.v2-data'
+
+    def _new_backup_data_filename(self, backupname):
+        """return a filename to backup a data-file or None"""
+        if not self._use_dirstate_v2:
+            return None
+        data_filename = self._map.docket.data_filename()
+        return data_filename, self.data_backup_filename(backupname)
+
+    def backup_data_file(self, backupname):
+        if not self._use_dirstate_v2:
+            return None
+        docket = docketmod.DirstateDocket.parse(
+            self._opener.read(backupname),
+            self._nodeconstants,
+        )
+        return self.data_backup_filename(backupname), docket.data_filename()
+
     def savebackup(self, tr, backupname):
         '''Save current dirstate into backup file'''
         filename = self._actualfilename(tr)
@@ -1472,6 +1494,19 @@
             self._opener.join(backupname),
             hardlink=True,
         )
+        data_pair = self._new_backup_data_filename(backupname)
+        if data_pair is not None:
+            data_filename, bck_data_filename = data_pair
+            util.copyfile(
+                self._opener.join(data_filename),
+                self._opener.join(bck_data_filename),
+                hardlink=True,
+            )
+            if tr is not None:
+                # ensure that pending file written above is unlinked at
+                # failure, even if tr.writepending isn't invoked until the
+                # end of this transaction
+                tr.registertmp(bck_data_filename, location=b'plain')
 
     def restorebackup(self, tr, backupname):
         '''Restore dirstate by backup file'''
@@ -1480,14 +1515,29 @@
         self.invalidate()
         filename = self._actualfilename(tr)
         o = self._opener
+        data_pair = self.backup_data_file(backupname)
         if util.samefile(o.join(backupname), o.join(filename)):
             o.unlink(backupname)
         else:
             o.rename(backupname, filename, checkambig=True)
 
+        if data_pair is not None:
+            data_backup, target = data_pair
+            if o.exists(target) and util.samefile(
+                o.join(data_backup), o.join(target)
+            ):
+                o.unlink(data_backup)
+            else:
+                o.rename(data_backup, target, checkambig=True)
+
     def clearbackup(self, tr, backupname):
         '''Clear backup file'''
-        self._opener.unlink(backupname)
+        o = self._opener
+        data_backup = self.backup_data_file(backupname)
+        o.unlink(backupname)
+
+        if data_backup is not None:
+            o.unlink(data_backup[0])
 
     def verify(self, m1, m2):
         """check the dirstate content again the parent manifest and yield errors"""
--- a/mercurial/dirstatemap.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/mercurial/dirstatemap.py	Thu Sep 01 16:51:26 2022 +0200
@@ -115,8 +115,6 @@
             self.parents(), len(packed), meta
         )
         data_filename = new_docket.data_filename()
-        if tr:
-            tr.add(data_filename, 0)
         self._opener.write(data_filename, packed)
         # Write the new docket after the new data file has been
         # written. Because `st` was opened with `atomictemp=True`,
--- a/mercurial/localrepo.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/mercurial/localrepo.py	Thu Sep 01 16:51:26 2022 +0200
@@ -2619,16 +2619,23 @@
         return tr
 
     def _journalfiles(self):
-        return (
+        first = (
             (self.svfs, b'journal'),
             (self.svfs, b'journal.narrowspec'),
             (self.vfs, b'journal.narrowspec.dirstate'),
             (self.vfs, b'journal.dirstate'),
+        )
+        middle = []
+        dirstate_data = self.dirstate.data_backup_filename(b'journal.dirstate')
+        if dirstate_data is not None:
+            middle.append((self.vfs, dirstate_data))
+        end = (
             (self.vfs, b'journal.branch'),
             (self.vfs, b'journal.desc'),
             (bookmarks.bookmarksvfs(self), b'journal.bookmarks'),
             (self.svfs, b'journal.phaseroots'),
         )
+        return first + tuple(middle) + end
 
     def undofiles(self):
         return [(vfs, undoname(x)) for vfs, x in self._journalfiles()]
--- a/mercurial/mergestate.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/mercurial/mergestate.py	Thu Sep 01 16:51:26 2022 +0200
@@ -159,7 +159,7 @@
 ACTION_ADD = MergeAction(b'a', narrow_safe=True, changes=CHANGE_ADDED)
 ACTION_GET = MergeAction(b'g', narrow_safe=True, changes=CHANGE_MODIFIED)
 ACTION_PATH_CONFLICT = MergeAction(b'p')
-ACTION_PATH_CONFLICT_RESOLVE = MergeAction('pr')
+ACTION_PATH_CONFLICT_RESOLVE = MergeAction(b'pr')
 ACTION_ADD_MODIFIED = MergeAction(
     b'am', narrow_safe=True, changes=CHANGE_ADDED
 )  # not 100% about the changes value here
--- a/mercurial/treediscovery.py	Sun Jun 05 07:16:29 2022 +0200
+++ b/mercurial/treediscovery.py	Thu Sep 01 16:51:26 2022 +0200
@@ -38,7 +38,12 @@
 
     if audit is not None:
         audit[b'total-roundtrips'] = 1
+        audit[b'total-roundtrips-heads'] = 1
+        audit[b'total-roundtrips-branches'] = 0
+        audit[b'total-roundtrips-between'] = 0
         audit[b'total-queries'] = 0
+        audit[b'total-queries-branches'] = 0
+        audit[b'total-queries-between'] = 0
 
     if repo.changelog.tip() == repo.nullid:
         base.add(repo.nullid)
@@ -71,6 +76,9 @@
     with remote.commandexecutor() as e:
         if audit is not None:
             audit[b'total-queries'] += len(unknown)
+            audit[b'total-queries-branches'] += len(unknown)
+            audit[b'total-roundtrips'] += 1
+            audit[b'total-roundtrips-branches'] += 1
         branches = e.callcommand(b'branches', {b'nodes': unknown}).result()
 
     unknown = collections.deque(branches)
@@ -110,16 +118,20 @@
             seen.add(n[0])
 
         if r:
-            reqcnt += 1
-            progress.increment()
-            repo.ui.debug(
-                b"request %d: %s\n" % (reqcnt, b" ".join(map(short, r)))
-            )
             for p in range(0, len(r), 10):
+                reqcnt += 1
+                progress.increment()
+                if repo.ui.debugflag:
+                    msg = b"request %d: %s\n"
+                    msg %= (reqcnt, b" ".join(map(short, r)))
+                    repo.ui.debug(msg)
                 with remote.commandexecutor() as e:
                     subset = r[p : p + 10]
                     if audit is not None:
                         audit[b'total-queries'] += len(subset)
+                        audit[b'total-queries-branches'] += len(subset)
+                        audit[b'total-roundtrips'] += 1
+                        audit[b'total-roundtrips-branches'] += 1
                     branches = e.callcommand(
                         b'branches',
                         {
@@ -142,6 +154,9 @@
         with remote.commandexecutor() as e:
             if audit is not None:
                 audit[b'total-queries'] += len(search)
+                audit[b'total-queries-between'] += len(search)
+                audit[b'total-roundtrips'] += 1
+                audit[b'total-roundtrips-between'] += 1
             between = e.callcommand(b'between', {b'pairs': search}).result()
 
         for n, l in zip(search, between):
@@ -187,7 +202,5 @@
 
     progress.complete()
     repo.ui.debug(b"%d total queries\n" % reqcnt)
-    if audit is not None:
-        audit[b'total-roundtrips'] = reqcnt
 
     return base, list(fetch), heads
--- a/rust/Cargo.lock	Sun Jun 05 07:16:29 2022 +0200
+++ b/rust/Cargo.lock	Thu Sep 01 16:51:26 2022 +0200
@@ -222,22 +222,12 @@
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.4.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
-dependencies = [
- "crossbeam-utils 0.7.2",
- "maybe-uninit",
-]
-
-[[package]]
-name = "crossbeam-channel"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa"
 dependencies = [
  "cfg-if 1.0.0",
- "crossbeam-utils 0.8.1",
+ "crossbeam-utils",
 ]
 
 [[package]]
@@ -248,7 +238,7 @@
 dependencies = [
  "cfg-if 1.0.0",
  "crossbeam-epoch",
- "crossbeam-utils 0.8.1",
+ "crossbeam-utils",
 ]
 
 [[package]]
@@ -259,7 +249,7 @@
 dependencies = [
  "cfg-if 1.0.0",
  "const_fn",
- "crossbeam-utils 0.8.1",
+ "crossbeam-utils",
  "lazy_static",
  "memoffset",
  "scopeguard",
@@ -267,17 +257,6 @@
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
-dependencies = [
- "autocfg",
- "cfg-if 0.1.10",
- "lazy_static",
-]
-
-[[package]]
-name = "crossbeam-utils"
 version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
@@ -476,7 +455,7 @@
  "byteorder",
  "bytes-cast",
  "clap",
- "crossbeam-channel 0.4.4",
+ "crossbeam-channel",
  "derive_more",
  "flate2",
  "format-bytes",
@@ -488,7 +467,7 @@
  "libc",
  "log",
  "memmap2",
- "micro-timer 0.3.1",
+ "micro-timer",
  "ouroboros",
  "pretty_assertions",
  "rand 0.8.5",
@@ -508,7 +487,7 @@
 version = "0.1.0"
 dependencies = [
  "cpython",
- "crossbeam-channel 0.5.2",
+ "crossbeam-channel",
  "env_logger",
  "hg-core",
  "libc",
@@ -621,12 +600,6 @@
 ]
 
 [[package]]
-name = "maybe-uninit"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
-
-[[package]]
 name = "memchr"
 version = "2.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -634,9 +607,9 @@
 
 [[package]]
 name = "memmap2"
-version = "0.4.0"
+version = "0.5.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de5d3112c080d58ce560081baeaab7e1e864ca21795ddbf533d5b1842bb1ecf8"
+checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498"
 dependencies = [
  "libc",
  "stable_deref_trait",
@@ -653,38 +626,16 @@
 
 [[package]]
 name = "micro-timer"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2620153e1d903d26b72b89f0e9c48d8c4756cba941c185461dddc234980c298c"
-dependencies = [
- "micro-timer-macros 0.3.1",
- "scopeguard",
-]
-
-[[package]]
-name = "micro-timer"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5de32cb59a062672560d6f0842c4aa7714727457b9fe2daf8987d995a176a405"
 dependencies = [
- "micro-timer-macros 0.4.0",
+ "micro-timer-macros",
  "scopeguard",
 ]
 
 [[package]]
 name = "micro-timer-macros"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e28a3473e6abd6e9aab36aaeef32ad22ae0bd34e79f376643594c2b152ec1c5d"
-dependencies = [
- "proc-macro2",
- "quote",
- "scopeguard",
- "syn",
-]
-
-[[package]]
-name = "micro-timer-macros"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cee948b94700125b52dfb68dd17c19f6326696c1df57f92c05ee857463c93ba1"
@@ -973,9 +924,9 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
 dependencies = [
- "crossbeam-channel 0.5.2",
+ "crossbeam-channel",
  "crossbeam-deque",
- "crossbeam-utils 0.8.1",
+ "crossbeam-utils",
  "lazy_static",
  "num_cpus",
 ]
@@ -1029,7 +980,7 @@
  "home",
  "lazy_static",
  "log",
- "micro-timer 0.4.0",
+ "micro-timer",
  "regex",
  "users",
  "which",
--- a/rust/hg-core/Cargo.toml	Sun Jun 05 07:16:29 2022 +0200
+++ b/rust/hg-core/Cargo.toml	Thu Sep 01 16:51:26 2022 +0200
@@ -29,10 +29,10 @@
 twox-hash = "1.6.2"
 same-file = "1.0.6"
 tempfile = "3.1.0"
-crossbeam-channel = "0.4"
-micro-timer = "0.3.0"
+crossbeam-channel = "0.5.0"
+micro-timer = "0.4.0"
 log = "0.4.8"
-memmap2 = {version = "0.4", features = ["stable_deref_trait"]}
+memmap2 = { version = "0.5.3", features = ["stable_deref_trait"] }
 zstd = "0.5.3"
 format-bytes = "0.3.0"
 
--- a/rust/hg-core/src/dirstate_tree/status.rs	Sun Jun 05 07:16:29 2022 +0200
+++ b/rust/hg-core/src/dirstate_tree/status.rs	Thu Sep 01 16:51:26 2022 +0200
@@ -728,9 +728,9 @@
                         );
                     })
                 }
-            }
-            if self.options.collect_traversed_dirs {
-                self.outcome.lock().unwrap().traversed.push(hg_path.into())
+                if self.options.collect_traversed_dirs {
+                    self.outcome.lock().unwrap().traversed.push(hg_path.into())
+                }
             }
             is_ignored
         } else {
--- a/rust/hg-core/src/matchers.rs	Sun Jun 05 07:16:29 2022 +0200
+++ b/rust/hg-core/src/matchers.rs	Thu Sep 01 16:51:26 2022 +0200
@@ -791,7 +791,7 @@
             dirs,
             parents,
         } = roots_dirs_and_parents(&ignore_patterns)?;
-        let prefix = ignore_patterns.iter().any(|k| match k.syntax {
+        let prefix = ignore_patterns.iter().all(|k| match k.syntax {
             PatternSyntax::Path | PatternSyntax::RelPath => true,
             _ => false,
         });
@@ -1094,6 +1094,31 @@
             matcher.visit_children_set(HgPath::new(b"dir/subdir/x")),
             VisitChildrenSet::This
         );
+
+        // Test multiple patterns
+        let matcher = IncludeMatcher::new(vec![
+            IgnorePattern::new(PatternSyntax::RelPath, b"foo", Path::new("")),
+            IgnorePattern::new(PatternSyntax::Glob, b"g*", Path::new("")),
+        ])
+        .unwrap();
+
+        assert_eq!(
+            matcher.visit_children_set(HgPath::new(b"")),
+            VisitChildrenSet::This
+        );
+
+        // Test multiple patterns
+        let matcher = IncludeMatcher::new(vec![IgnorePattern::new(
+            PatternSyntax::Glob,
+            b"**/*.exe",
+            Path::new(""),
+        )])
+        .unwrap();
+
+        assert_eq!(
+            matcher.visit_children_set(HgPath::new(b"")),
+            VisitChildrenSet::This
+        );
     }
 
     #[test]
--- a/tests/test-check-code.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-check-code.t	Thu Sep 01 16:51:26 2022 +0200
@@ -30,6 +30,7 @@
   Skipping contrib/packaging/hgpackaging/pyoxidizer.py it has no-che?k-code (glob)
   Skipping contrib/packaging/hgpackaging/util.py it has no-che?k-code (glob)
   Skipping contrib/packaging/hgpackaging/wix.py it has no-che?k-code (glob)
+  Skipping hgext/fsmonitor/__init__.py it has no-che?k-code (glob)
   Skipping i18n/polib.py it has no-che?k-code (glob)
   Skipping mercurial/statprof.py it has no-che?k-code (glob)
   Skipping tests/testlib/badserverext.py it has no-che?k-code (glob)
--- a/tests/test-dirstate.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-dirstate.t	Thu Sep 01 16:51:26 2022 +0200
@@ -213,4 +213,35 @@
 
 #endif
 
-  $ cd ..
+Transaction compatibility
+-------------------------
+
+The transaction preserves the dirstate.
+We should make sure all of it (docket + data) is preserved
+
+#if dirstate-v2
+  $ hg commit -m 'bli'
+#endif
+
+  $ hg update --quiet
+  $ hg revert --all --quiet
+  $ rm -f a
+  $ echo foo > foo
+  $ hg add foo
+  $ hg commit -m foo
+
+#if dirstate-v2
+  $ uid=$(find_dirstate_uuid)
+  $ touch bar
+  $ while [ uid = $(find_dirstate_uuid) ]; do
+  >    hg add bar;
+  >    hg remove bar;
+  > done;
+  $ rm bar
+#endif
+  $ hg rollback
+  repository tip rolled back to revision 1 (undo commit)
+  working directory now based on revision 1
+
+  $ hg status
+  A foo
--- a/tests/test-git-interop.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-git-interop.t	Thu Sep 01 16:51:26 2022 +0200
@@ -119,6 +119,10 @@
 and bookmarks:
   $ hg bookmarks
    * master                    1:3d9be8deba43
+  $ hg up master
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg bookmarks
+   * master                    1:3d9be8deba43
 
 diff even works transparently in both systems:
   $ echo blah >> alpha
@@ -421,5 +425,8 @@
   7[tip][master]   1a0fee76bfc4   1970-01-01 00:00 +0000   test
     remove beta
   
-
-
+This covers revlog.findmissingrevs() (issue6472)
+  $ hg log -r 'last(only(master))' -Tcompact
+  7[tip][master]   1a0fee76bfc4   1970-01-01 00:00 +0000   test
+    remove beta
+  
--- a/tests/test-issue6528.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-issue6528.t	Thu Sep 01 16:51:26 2022 +0200
@@ -177,14 +177,7 @@
   $ cd ..
   $ mkdir repo-to-fix
   $ cd repo-to-fix
-#if windows
-tar interprets `:` in paths (like `C:`) as being remote, force local on Windows
-only since some versions of tar don't have this flag.
-
-  $ tar --force-local -xf $TESTDIR/bundles/issue6528.tar
-#else
-  $ tar xf $TESTDIR/bundles/issue6528.tar
-#endif
+  $ tar -x < $TESTDIR/bundles/issue6528.tar
 
 Check that the issue is present
 (It is currently not present with rhg but will be when optimizations are added
@@ -285,14 +278,7 @@
   $ cd ..
   $ mkdir repo-to-fix-report
   $ cd repo-to-fix
-#if windows
-tar interprets `:` in paths (like `C:`) as being remote, force local on Windows
-only since some versions of tar don't have this flag.
-
-  $ tar --force-local -xf $TESTDIR/bundles/issue6528.tar
-#else
-  $ tar xf $TESTDIR/bundles/issue6528.tar
-#endif
+  $ tar -x < "$TESTDIR"/bundles/issue6528.tar
 
   $ hg debug-repair-issue6528 --to-report $TESTTMP/report.txt
   found affected revision 1 for filelog 'data/D.txt.i'
@@ -379,14 +365,7 @@
 
   $ mkdir repo-to-fix-not-inline
   $ cd repo-to-fix-not-inline
-#if windows
-tar interprets `:` in paths (like `C:`) as being remote, force local on Windows
-only since some versions of tar don't have this flag.
-
-  $ tar --force-local -xf $TESTDIR/bundles/issue6528.tar
-#else
-  $ tar xf $TESTDIR/bundles/issue6528.tar
-#endif
+  $ tar -x < "$TESTDIR"/bundles/issue6528.tar
   $ echo b >> b.txt
   $ hg commit -qm "inline -> separate"
   $ find .hg -name *b.txt.d
--- a/tests/test-nointerrupt.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-nointerrupt.t	Thu Sep 01 16:51:26 2022 +0200
@@ -27,8 +27,6 @@
   >     with ui.uninterruptible():
   >         testing.write_file(sync_file, b'%d' % os.getpid())
   >         testing.wait_file(done_file)
-  >         # make sure we get rescheduled and the signal get a chance to be handled
-  >         time.sleep(0.1)
   >         ui.warn(b"end of unsafe operation\n")
   >     ui.warn(b"%d second(s) passed\n" % int(time.time() - start))
   > EOF
@@ -42,14 +40,26 @@
   > fi
   > "$RUNTESTDIR/testlib/wait-on-file" 10 "$SYNC_FILE" || exit 2
   > kill -s \$SIG \`cat "$SYNC_FILE"\`
-  > sleep 1
-  > touch "$DONE_FILE"
   > EOF
 
 #if no-windows
   $ chmod +x send-signal.sh
 #endif
 
+  $ cat > wait-signal.sh << 'EOF'
+  > #!/bin/sh
+  > (hg wait-signal 2>&1; echo [$?]) | {
+  >     read line
+  >     touch "$DONE_FILE"
+  >     echo "$line"
+  >     cat
+  > }
+  > EOF
+
+#if no-windows
+  $ chmod +x wait-signal.sh
+#endif
+
 Kludge to emulate timeout(1) which is not generally available.
 
 Set up repository
@@ -60,11 +70,10 @@
   > wait_ext = $TESTTMP/wait_ext.py
   > EOF
 
-
 Test ctrl-c
   $ rm -f $SYNC_FILE $DONE_FILE
   $ sh -c "../send-signal.sh INT" &
-  $ hg wait-signal
+  $ ../wait-signal.sh
   interrupted!
   [255]
 
@@ -75,7 +84,7 @@
 
   $ rm -f $SYNC_FILE $DONE_FILE
   $ sh -c "../send-signal.sh INT" &
-  $ hg wait-signal
+  $ ../wait-signal.sh
   interrupted!
   [255]
 
@@ -86,7 +95,7 @@
 
   $ rm -f $SYNC_FILE $DONE_FILE
   $ sh -c "../send-signal.sh INT" &
-  $ hg wait-signal
+  $ ../wait-signal.sh
   shutting down cleanly
   press ^C again to terminate immediately (dangerous)
   end of unsafe operation
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-purge-ignored-directory.t	Thu Sep 01 16:51:26 2022 +0200
@@ -0,0 +1,12 @@
+skip ignored directories if -i or --all not specified
+
+  $ hg init t
+  $ cd t
+  $ echo 'ignored' > .hgignore
+  $ hg ci -qA -m init -d'2 0'
+  $ mkdir ignored
+  $ ls
+  ignored
+  $ hg purge -v --no-confirm
+  $ ls
+  ignored
--- a/tests/test-revlog.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-revlog.t	Thu Sep 01 16:51:26 2022 +0200
@@ -73,7 +73,7 @@
 - hg commit -Am_
 - remove some cache files
 
-  $ tar --force-local -xf "$TESTDIR"/bundles/test-revlog-diff-relative-to-nullrev.tar
+  $ tar -x < "$TESTDIR"/bundles/test-revlog-diff-relative-to-nullrev.tar
   $ cd nullrev-diff
   $ hg debugdeltachain a
       rev      p1      p2  chain# chainlen     prev   delta       size    rawsize  chainsize     ratio   lindist extradist extraratio   readsize largestblk rddensity srchunks
--- a/tests/test-rhg.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-rhg.t	Thu Sep 01 16:51:26 2022 +0200
@@ -361,7 +361,7 @@
   $ echo "maxsize = 1" >> $HGRCPATH
   $ $NO_FALLBACK rhg files > /dev/null
   $ cat .hg/blackbox.log
-  ????-??-?? ??:??:??.??? * @d3873e73d99ef67873dac33fbcc66268d5d2b6f4 (*)> (rust) files exited 0 after 0.??? seconds (glob)
+  ????-??-?? ??:??:??.??? * @d3873e73d99ef67873dac33fbcc66268d5d2b6f4 (*)> (rust) files exited 0 after * seconds (glob)
   $ cat .hg/blackbox.log.1
   ????-??-?? ??:??:??.??? * @d3873e73d99ef67873dac33fbcc66268d5d2b6f4 (*)> (rust) files (glob)
 
--- a/tests/test-setdiscovery.t	Sun Jun 05 07:16:29 2022 +0200
+++ b/tests/test-setdiscovery.t	Thu Sep 01 16:51:26 2022 +0200
@@ -44,8 +44,10 @@
   searching for changes
   unpruned common: 01241442b3c2 66f7d451a68b b5714e113bc0
   elapsed time:  * seconds (glob)
-  round-trips:                   2
+  round-trips:                   4
   queries:                       6
+    queries-branches:            2
+    queries-between:             4
   heads summary:
     total common heads:          2
       also local heads:          2
@@ -144,6 +146,8 @@
   elapsed time:  * seconds (glob)
   round-trips:                   1
   queries:                       0
+    queries-branches:            0
+    queries-between:             0
   heads summary:
     total common heads:          2
       also local heads:          1
@@ -247,8 +251,10 @@
   searching for changes
   unpruned common: bebd167eb94d
   elapsed time:  * seconds (glob)
-  round-trips:                   2
+  round-trips:                   4
   queries:                       3
+    queries-branches:            1
+    queries-between:             2
   heads summary:
     total common heads:          1
       also local heads:          1
@@ -351,8 +357,10 @@
   searching for changes
   unpruned common: 66f7d451a68b bebd167eb94d
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -461,8 +469,10 @@
   searching for changes
   unpruned common: 2dc09a01254d
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          1
@@ -565,8 +575,10 @@
   searching for changes
   unpruned common: 2dc09a01254d 66f7d451a68b
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -676,8 +688,10 @@
   searching for changes
   unpruned common: 66f7d451a68b
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -780,8 +794,10 @@
   searching for changes
   unpruned common: 66f7d451a68b
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -891,8 +907,10 @@
   searching for changes
   unpruned common: 66f7d451a68b
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -995,8 +1013,10 @@
   searching for changes
   unpruned common: 66f7d451a68b
   elapsed time:  * seconds (glob)
-  round-trips:                   3
+  round-trips:                   5
   queries:                       4
+    queries-branches:            1
+    queries-between:             3
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -1106,8 +1126,10 @@
   searching for changes
   unpruned common: 7ead0cba2838
   elapsed time:  * seconds (glob)
-  round-trips:                   4
+  round-trips:                   6
   queries:                       5
+    queries-branches:            1
+    queries-between:             4
   heads summary:
     total common heads:          1
       also local heads:          0
@@ -1216,8 +1238,10 @@
   searching for changes
   unpruned common: 7ead0cba2838
   elapsed time:  * seconds (glob)
-  round-trips:                   3
+  round-trips:                   5
   queries:                       4
+    queries-branches:            1
+    queries-between:             3
   heads summary:
     total common heads:          1
       also local heads:          0