merge with stable
authorPulkit Goyal <7895pulkit@gmail.com>
Fri, 29 Jan 2021 17:32:09 +0530
changeset 46414 16c18d5e5dc8
parent 46410 892eb7c5edaa (current diff)
parent 46413 ed43b6fa847e (diff)
child 46416 bc3f3b59d0a4
merge with stable
contrib/heptapod-ci.yml
mercurial/commands.py
mercurial/helptext/config.txt
mercurial/localrepo.py
mercurial/upgrade.py
setup.py
tests/test-share-safe.t
--- a/contrib/automation/hgautomation/linux.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/automation/hgautomation/linux.py	Fri Jan 29 17:32:09 2021 +0530
@@ -75,7 +75,7 @@
 sudo -H -u hg -g hg /home/hg/.cargo/bin/rustup install 1.31.1 1.46.0
 sudo -H -u hg -g hg /home/hg/.cargo/bin/rustup component add clippy
 
-sudo -H -u hg -g hg /home/hg/.cargo/bin/cargo install --version 0.9.0 pyoxidizer
+sudo -H -u hg -g hg /home/hg/.cargo/bin/cargo install --version 0.10.3 pyoxidizer
 '''
 
 
--- a/contrib/heptapod-ci.yml	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/heptapod-ci.yml	Fri Jan 29 17:32:09 2021 +0530
@@ -16,8 +16,6 @@
     before_script:
       - hg clone . /tmp/mercurial-ci/ --noupdate --config phases.publish=no
       - hg -R /tmp/mercurial-ci/ update `hg log --rev '.' --template '{node}'`
-      - cd /tmp/mercurial-ci/rust/rhg
-      - cargo build
       - cd /tmp/mercurial-ci/
       - ls -1 tests/test-check-*.* > /tmp/check-tests.txt
       - black --version
@@ -27,6 +25,17 @@
         - echo "$RUNTEST_ARGS"
         - HGMODULEPOLICY="$TEST_HGMODULEPOLICY" "$PYTHON" tests/run-tests.py --color=always $RUNTEST_ARGS
 
+
+.rust_template: &rust
+    before_script:
+      - hg clone . /tmp/mercurial-ci/ --noupdate --config phases.publish=no
+      - hg -R /tmp/mercurial-ci/ update `hg log --rev '.' --template '{node}'`
+      - ls -1 tests/test-check-*.* > /tmp/check-tests.txt
+      - cd /tmp/mercurial-ci/rust/rhg
+      - cargo build
+      - cd /tmp/mercurial-ci/
+
+
 checks-py2:
     <<: *runtests
     variables:
@@ -83,6 +92,7 @@
 
 test-py2-rust:
     <<: *runtests
+    <<: *rust
     variables:
         HGWITHRUSTEXT: cpython
         RUNTEST_ARGS: "--rust --blacklist /tmp/check-tests.txt"
@@ -90,6 +100,7 @@
 
 test-py3-rust:
     <<: *runtests
+    <<: *rust
     variables:
         HGWITHRUSTEXT: cpython
         RUNTEST_ARGS: "--rust --blacklist /tmp/check-tests.txt"
--- a/contrib/install-windows-dependencies.ps1	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/install-windows-dependencies.ps1	Fri Jan 29 17:32:09 2021 +0530
@@ -125,7 +125,7 @@
     Invoke-Process "${prefix}\cargo\bin\rustup.exe" "component add clippy"
 
     # Install PyOxidizer for packaging.
-    Invoke-Process "${prefix}\cargo\bin\cargo.exe" "install --version 0.9.0 pyoxidizer"
+    Invoke-Process "${prefix}\cargo\bin\cargo.exe" "install --version 0.10.3 pyoxidizer"
 }
 
 function Install-Dependencies($prefix) {
--- a/contrib/packaging/debian/copyright	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/packaging/debian/copyright	Fri Jan 29 17:32:09 2021 +0530
@@ -3,7 +3,7 @@
 Source: https://www.mercurial-scm.org/
 
 Files: *
-Copyright: 2005-2020, Matt Mackall <mpm@selenic.com> and others.
+Copyright: 2005-2021, Matt Mackall <mpm@selenic.com> and others.
 License: GPL-2+
  This program is free software; you can redistribute it
  and/or modify it under the terms of the GNU General Public
--- a/contrib/packaging/hgpackaging/inno.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/packaging/hgpackaging/inno.py	Fri Jan 29 17:32:09 2021 +0530
@@ -33,6 +33,11 @@
     'win32ctypes',
 }
 
+EXTRA_INCLUDES = {
+    '_curses',
+    '_curses_panel',
+}
+
 EXTRA_INSTALL_RULES = [
     ('contrib/win32/mercurial.ini', 'defaultrc/mercurial.rc'),
 ]
@@ -78,6 +83,7 @@
         'inno',
         requirements_txt,
         extra_packages=EXTRA_PACKAGES,
+        extra_includes=EXTRA_INCLUDES,
     )
 
     # Purge the staging directory for every build so packaging is
--- a/contrib/packaging/hgpackaging/py2exe.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/packaging/hgpackaging/py2exe.py	Fri Jan 29 17:32:09 2021 +0530
@@ -67,6 +67,7 @@
     extra_excludes=None,
     extra_dll_excludes=None,
     extra_packages_script=None,
+    extra_includes=None,
 ):
     """Build Mercurial with py2exe.
 
@@ -176,6 +177,8 @@
         )
         if hgext3rd_extras:
             env['HG_PY2EXE_EXTRA_INSTALL_PACKAGES'] = ' '.join(hgext3rd_extras)
+    if extra_includes:
+        env['HG_PY2EXE_EXTRA_INCLUDES'] = ' '.join(sorted(extra_includes))
     if extra_excludes:
         env['HG_PY2EXE_EXTRA_EXCLUDES'] = ' '.join(sorted(extra_excludes))
     if extra_dll_excludes:
--- a/contrib/packaging/hgpackaging/wix.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/packaging/hgpackaging/wix.py	Fri Jan 29 17:32:09 2021 +0530
@@ -39,6 +39,10 @@
     'win32ctypes',
 }
 
+EXTRA_INCLUDES = {
+    '_curses',
+    '_curses_panel',
+}
 
 EXTRA_INSTALL_RULES = [
     ('contrib/packaging/wix/COPYING.rtf', 'COPYING.rtf'),
@@ -330,6 +334,7 @@
         requirements_txt,
         extra_packages=EXTRA_PACKAGES,
         extra_packages_script=extra_packages_script,
+        extra_includes=EXTRA_INCLUDES,
     )
 
     build_dir = hg_build_dir / ('wix-%s' % arch)
--- a/contrib/packaging/inno/mercurial.iss	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/packaging/inno/mercurial.iss	Fri Jan 29 17:32:09 2021 +0530
@@ -6,7 +6,7 @@
 #endif
 
 [Setup]
-AppCopyright=Copyright 2005-2020 Matt Mackall and others
+AppCopyright=Copyright 2005-2021 Matt Mackall and others
 AppName=Mercurial
 AppVersion={#VERSION}
 OutputBaseFilename=Mercurial-{#VERSION}{#SUFFIX}
@@ -29,7 +29,7 @@
 DefaultDirName={pf}\Mercurial
 SourceDir=stage
 VersionInfoDescription=Mercurial distributed SCM (version {#VERSION})
-VersionInfoCopyright=Copyright 2005-2020 Matt Mackall and others
+VersionInfoCopyright=Copyright 2005-2021 Matt Mackall and others
 VersionInfoCompany=Matt Mackall and others
 VersionInfoVersion={#QUAD_VERSION}
 InternalCompressLevel=max
Binary file contrib/packaging/wix/COPYING.rtf has changed
--- a/contrib/win32/ReadMe.html	Thu Jan 28 00:14:15 2021 -0800
+++ b/contrib/win32/ReadMe.html	Fri Jan 29 17:32:09 2021 +0530
@@ -140,7 +140,7 @@
     </p>
 
     <p>
-      Mercurial is Copyright 2005-2020 Matt Mackall and others.
+      Mercurial is Copyright 2005-2021 Matt Mackall and others.
     </p>
 
     <p>
--- a/mercurial/commands.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/commands.py	Fri Jan 29 17:32:09 2021 +0530
@@ -7809,7 +7809,7 @@
     )
     license = _(
         b"(see https://mercurial-scm.org for more information)\n"
-        b"\nCopyright (C) 2005-2020 Matt Mackall and others\n"
+        b"\nCopyright (C) 2005-2021 Matt Mackall and others\n"
         b"This is free software; see the source for copying conditions. "
         b"There is NO\nwarranty; "
         b"not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
--- a/mercurial/helptext/config.txt	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/helptext/config.txt	Fri Jan 29 17:32:09 2021 +0530
@@ -147,14 +147,12 @@
 merge tool configuration but packagers can also put other default configuration
 there.
 
-.. container:: verbose
-
-    On versions 5.7 and later, if share-safe functionality is enabled,
-    shares will read config file of share source too.
-    `<share-source/.hg/hgrc>` is read before reading `<repo/.hg/hgrc>`.
-
-    For configs which should not be shared, `<repo/.hg/hgrc-not-shared>`
-    should be used.
+On versions 5.7 and later, if share-safe functionality is enabled,
+shares will read config file of share source too.
+`<share-source/.hg/hgrc>` is read before reading `<repo/.hg/hgrc>`.
+
+For configs which should not be shared, `<repo/.hg/hgrc-not-shared>`
+should be used.
 
 Syntax
 ======
@@ -915,8 +913,27 @@
     Disabled by default.
 
 ``use-share-safe``
-    Enable or disable the "share-safe" functionality, which enables shares
-    to read requirements and configuration of its source repository.
+    Enforce "safe" behaviors for all "shares" that access this repository.
+
+    With this feature, "shares" using this repository as a source will:
+
+    * read the source repository's configuration (`<source>/.hg/hgrc`).
+    * read and use the source repository's "requirements"
+      (except the working copy specific one).
+
+    Without this feature, "shares" using this repository as a source will:
+
+    * keep tracking the repository "requirements" in the share only, ignoring
+      the source "requirements", possibly diverging from them.
+    * ignore source repository config. This can create problems, like silently
+      ignoring important hooks.
+
+    Beware that existing shares will not be upgraded/downgraded, and by
+    default, Mercurial will refuse to interact with them until the mismatch
+    is resolved. See :hg:`help config share.safe-mismatch.source-safe` and
+    :hg:`help config share.safe-mismatch.source-not-safe` for details.
+
+    Introduced in Mercurial 5.7.
 
     Disabled by default.
 
@@ -1959,6 +1976,14 @@
     tries to upgrade the share; if it fails, continue by
     respecting the share source setting
 
+    Check :hg:`help config format.use-share-safe` for details about the
+    share-safe feature.
+
+``safe-mismatch.source-safe.warn``
+    Shows a warning on operations if the shared repository does not use
+    share-safe, but the source repository does.
+    (default: True)
+
 ``safe-mismatch.source-not-safe``
 
     Controls what happens when the shared repository uses the share-safe
@@ -1977,11 +2002,8 @@
     tries to downgrade the share to not use share-safe;
     if it fails, continue by respecting the shared source setting
 
-
-``safe-mismatch.source-safe.warn``
-    Shows a warning on operations if the shared repository does not use
-    share-safe, but the source repository does.
-    (default: True)
+    Check :hg:`help config format.use-share-safe` for details about the
+    share-safe feature.
 
 ``safe-mismatch.source-not-safe.warn``
     Shows a warning on operations if the shared repository uses share-safe,
--- a/mercurial/helptext/hg.1.txt	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/helptext/hg.1.txt	Fri Jan 29 17:32:09 2021 +0530
@@ -112,7 +112,7 @@
 
 Copying
 """""""
-Copyright (C) 2005-2020 Matt Mackall.
+Copyright (C) 2005-2021 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License version 2 or any later version.
 
--- a/mercurial/helptext/hgignore.5.txt	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/helptext/hgignore.5.txt	Fri Jan 29 17:32:09 2021 +0530
@@ -26,7 +26,7 @@
 Copying
 =======
 This manual page is copyright 2006 Vadim Gelfer.
-Mercurial is copyright 2005-2020 Matt Mackall.
+Mercurial is copyright 2005-2021 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License version 2 or any later version.
 
--- a/mercurial/helptext/hgrc.5.txt	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/helptext/hgrc.5.txt	Fri Jan 29 17:32:09 2021 +0530
@@ -34,7 +34,7 @@
 Copying
 =======
 This manual page is copyright 2005 Bryan O'Sullivan.
-Mercurial is copyright 2005-2020 Matt Mackall.
+Mercurial is copyright 2005-2021 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License version 2 or any later version.
 
--- a/mercurial/helptext/internals/requirements.txt	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/helptext/internals/requirements.txt	Fri Jan 29 17:32:09 2021 +0530
@@ -131,7 +131,7 @@
 directory.
 
 bookmarksinstore
-==================
+================
 
 Bookmarks are stored in ``.hg/store/`` instead of directly in ``.hg/``
 where they used to be stored. The active bookmark is still stored
@@ -156,8 +156,8 @@
 benefit from a speedup. The other installations will do the necessary work to
 keep the index up to date, but will suffer a slowdown.
 
-exp-sharesafe
-=============
+share-safe
+==========
 
 Represents that the repository can be shared safely. Requirements and config of
 the source repository will be shared.
--- a/mercurial/localrepo.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/localrepo.py	Fri Jan 29 17:32:09 2021 +0530
@@ -568,6 +568,7 @@
     # repository was shared the old way. We check the share source .hg/requires
     # for SHARESAFE_REQUIREMENT to detect whether the current repository needs
     # to be reshared
+    hint = _("see `hg help config.format.use-share-safe` for more information")
     if requirementsmod.SHARESAFE_REQUIREMENT in requirements:
 
         if (
@@ -599,14 +600,10 @@
                 )
             elif mismatch_config == b'abort':
                 raise error.Abort(
-                    _(
-                        b"share source does not support exp-sharesafe requirement"
-                    )
+                    _(b"share source does not support share-safe requirement"),
+                    hint=hint,
                 )
             else:
-                hint = _(
-                    "run `hg help config.share.safe-mismatch.source-not-safe`"
-                )
                 raise error.Abort(
                     _(
                         b"share-safe mismatch with source.\nUnrecognized"
@@ -646,10 +643,10 @@
                     _(
                         b'version mismatch: source uses share-safe'
                         b' functionality while the current share does not'
-                    )
+                    ),
+                    hint=hint,
                 )
             else:
-                hint = _("run `hg help config.share.safe-mismatch.source-safe`")
                 raise error.Abort(
                     _(
                         b"share-safe mismatch with source.\nUnrecognized"
--- a/mercurial/upgrade.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/mercurial/upgrade.py	Fri Jan 29 17:32:09 2021 +0530
@@ -277,15 +277,20 @@
         scmutil.writerequires(hgvfs, diffrequires)
         ui.warn(_(b'repository upgraded to use share-safe mode\n'))
     except error.LockError as e:
+        hint = _(
+            "see `hg help config.format.use-share-safe` for more information"
+        )
         if mismatch_config == b'upgrade-abort':
             raise error.Abort(
                 _(b'failed to upgrade share, got error: %s')
-                % stringutil.forcebytestr(e.strerror)
+                % stringutil.forcebytestr(e.strerror),
+                hint=hint,
             )
         elif mismatch_warn:
             ui.warn(
                 _(b'failed to upgrade share, got error: %s\n')
-                % stringutil.forcebytestr(e.strerror)
+                % stringutil.forcebytestr(e.strerror),
+                hint=hint,
             )
     finally:
         if wlock:
@@ -329,17 +334,22 @@
         scmutil.writerequires(hgvfs, current_requirements)
         ui.warn(_(b'repository downgraded to not use share-safe mode\n'))
     except error.LockError as e:
+        hint = _(
+            "see `hg help config.format.use-share-safe` for more information"
+        )
         # If upgrade-abort is set, abort when upgrade fails, else let the
         # process continue as `upgrade-allow` is set
         if mismatch_config == b'downgrade-abort':
             raise error.Abort(
                 _(b'failed to downgrade share, got error: %s')
-                % stringutil.forcebytestr(e.strerror)
+                % stringutil.forcebytestr(e.strerror),
+                hint=hint,
             )
         elif mismatch_warn:
             ui.warn(
                 _(b'failed to downgrade share, got error: %s\n')
-                % stringutil.forcebytestr(e.strerror)
+                % stringutil.forcebytestr(e.strerror),
+                hint=hint,
             )
     finally:
         if wlock:
--- a/rust/hg-cpython/src/cindex.rs	Thu Jan 28 00:14:15 2021 -0800
+++ b/rust/hg-cpython/src/cindex.rs	Fri Jan 29 17:32:09 2021 +0530
@@ -16,7 +16,7 @@
 };
 use hg::revlog::{Node, RevlogIndex};
 use hg::{Graph, GraphError, Revision, WORKING_DIRECTORY_REVISION};
-use libc::c_int;
+use libc::{c_int, ssize_t};
 
 const REVLOG_CABI_VERSION: c_int = 2;
 
@@ -24,10 +24,10 @@
 pub struct Revlog_CAPI {
     abi_version: c_int,
     index_length:
-        unsafe extern "C" fn(index: *mut revlog_capi::RawPyObject) -> c_int,
+        unsafe extern "C" fn(index: *mut revlog_capi::RawPyObject) -> ssize_t,
     index_node: unsafe extern "C" fn(
         index: *mut revlog_capi::RawPyObject,
-        rev: c_int,
+        rev: ssize_t,
     ) -> *const Node,
     index_parents: unsafe extern "C" fn(
         index: *mut revlog_capi::RawPyObject,
@@ -157,7 +157,7 @@
 
     fn node(&self, rev: Revision) -> Option<&Node> {
         let raw = unsafe {
-            (self.capi.index_node)(self.index.as_ptr(), rev as c_int)
+            (self.capi.index_node)(self.index.as_ptr(), rev as ssize_t)
         };
         if raw.is_null() {
             None
--- a/setup.py	Thu Jan 28 00:14:15 2021 -0800
+++ b/setup.py	Fri Jan 29 17:32:09 2021 +0530
@@ -1700,6 +1700,8 @@
     'mercurial.pure',
 ]
 
+py2exe_includes = []
+
 py2exeexcludes = []
 py2exedllexcludes = ['crypt32.dll']
 
@@ -1710,7 +1712,7 @@
     extra['console'] = [
         {
             'script': 'hg',
-            'copyright': 'Copyright (C) 2005-2020 Matt Mackall and others',
+            'copyright': 'Copyright (C) 2005-2021 Matt Mackall and others',
             'product_version': version,
         }
     ]
@@ -1728,6 +1730,10 @@
     if extrapackages:
         py2exepackages.extend(extrapackages.split(' '))
 
+    extra_includes = os.environ.get('HG_PY2EXE_EXTRA_INCLUDES')
+    if extra_includes:
+        py2exe_includes.extend(extra_includes.split(' '))
+
     excludes = os.environ.get('HG_PY2EXE_EXTRA_EXCLUDES')
     if excludes:
         py2exeexcludes.extend(excludes.split(' '))
@@ -1827,6 +1833,7 @@
         'py2exe': {
             'bundle_files': 3,
             'dll_excludes': py2exedllexcludes,
+            'includes': py2exe_includes,
             'excludes': py2exeexcludes,
             'packages': py2exepackages,
         },
--- a/tests/test-lfs-test-server.t	Thu Jan 28 00:14:15 2021 -0800
+++ b/tests/test-lfs-test-server.t	Fri Jan 29 17:32:09 2021 +0530
@@ -420,7 +420,10 @@
 
 TODO: give the proper error indication from `hg serve`
 
-  $ hg --repo ../repo1 update -C tip --debug
+TODO: reconsider the except base class so that the git and hg errors yield the
+same exit status.
+
+  $ hg --repo ../repo1 update -C tip --debug --config ui.detailed-exit-code=False
   http auth: user foo, password ***
   resolving manifests
    branchmerge: False, force: True, partial: False
@@ -460,7 +463,7 @@
   Date: $HTTP_DATE$ (git-server !)
   abort: corrupt remote lfs object: d11e1a642b60813aee592094109b406089b8dff4cb157157f753418ec7857998 (git-server !)
   abort: LFS server error for "c": Validation error (hg-server !)
-  [50]
+  [255]
 
 The corrupted blob is not added to the usercache or local store
 
--- a/tests/test-persistent-nodemap.t	Thu Jan 28 00:14:15 2021 -0800
+++ b/tests/test-persistent-nodemap.t	Fri Jan 29 17:32:09 2021 +0530
@@ -31,6 +31,23 @@
 
 #endif
 
+#if rust
+
+Regression test for a previous bug in Rust/C FFI for the `Revlog_CAPI` capsule:
+in places where `mercurial/cext/revlog.c` function signatures use `Py_ssize_t`
+(64 bits on Linux x86_64), corresponding declarations in `rust/hg-cpython/src/cindex.rs`
+incorrectly used `libc::c_int` (32 bits).
+As a result, -1 passed from Rust for the null revision became 4294967295 in C.
+
+  $ hg log -r 00000000
+  changeset:   -1:000000000000
+  tag:         tip
+  user:        
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  
+
+#endif
+
 
   $ hg debugformat
   format-variant     repo
--- a/tests/test-share-safe.t	Thu Jan 28 00:14:15 2021 -0800
+++ b/tests/test-share-safe.t	Fri Jan 29 17:32:09 2021 +0530
@@ -405,6 +405,7 @@
 
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share
   abort: version mismatch: source uses share-safe functionality while the current share does not
+  (see `hg help config.format.use-share-safe` for more information)
   [255]
 
 
@@ -495,7 +496,8 @@
   
 
   $ hg log -GT "{node}: {desc}\n" -R ../ss-share
-  abort: share source does not support exp-sharesafe requirement
+  abort: share source does not support share-safe requirement
+  (see `hg help config.format.use-share-safe` for more information)
   [255]
 
 Testing automatic downgrade of shares when config is set
@@ -503,6 +505,7 @@
   $ touch ../ss-share/.hg/wlock
   $ hg log -GT "{node}: {desc}\n" -R ../ss-share --config share.safe-mismatch.source-not-safe=downgrade-abort
   abort: failed to downgrade share, got error: Lock held
+  (see `hg help config.format.use-share-safe` for more information)
   [255]
   $ rm ../ss-share/.hg/wlock
 
@@ -545,13 +548,14 @@
   store
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share
   abort: version mismatch: source uses share-safe functionality while the current share does not
+  (see `hg help config.format.use-share-safe` for more information)
   [255]
 
 Check that if lock is taken, upgrade fails but read operation are successful
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config share.safe-mismatch.source-safe=upgra
   abort: share-safe mismatch with source.
   Unrecognized value 'upgra' of `share.safe-mismatch.source-safe` set.
-  (run `hg help config.share.safe-mismatch.source-safe`)
+  (see `hg help config.format.use-share-safe` for more information)
   [255]
   $ touch ../nss-share/.hg/wlock
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config share.safe-mismatch.source-safe=upgrade-allow
@@ -569,6 +573,7 @@
 
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config share.safe-mismatch.source-safe=upgrade-abort
   abort: failed to upgrade share, got error: Lock held
+  (see `hg help config.format.use-share-safe` for more information)
   [255]
 
   $ rm ../nss-share/.hg/wlock
--- a/tests/test-wireproto-exchangev2-shallow.t	Thu Jan 28 00:14:15 2021 -0800
+++ b/tests/test-wireproto-exchangev2-shallow.t	Fri Jan 29 17:32:09 2021 +0530
@@ -100,10 +100,15 @@
   received frame(size=1170; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 3390ef850073
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset b709380892b1
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 47fe012ab237
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 97765fc3cd62
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset dc666cf9ecf3
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 93a8bd067ed2
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   checking for updated bookmarks
@@ -269,10 +274,15 @@
   received frame(size=1170; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 3390ef850073
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset b709380892b1
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 47fe012ab237
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 97765fc3cd62
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset dc666cf9ecf3
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 93a8bd067ed2
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   checking for updated bookmarks
@@ -407,8 +417,11 @@
   received frame(size=783; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 3390ef850073
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset b709380892b1
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 47fe012ab237
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 97765fc3cd62
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   checking for updated bookmarks
@@ -522,6 +535,7 @@
   received frame(size=400; request=1; stream=2; streamflags=encoded; type=command-response; flags=continuation)
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset dc666cf9ecf3
+  received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   add changeset 93a8bd067ed2
   received frame(size=0; request=1; stream=2; streamflags=; type=command-response; flags=eos) (?)
   checking for updated bookmarks