sharesafe: introduce config to disallow outdated shares if upgrade fails
authorPulkit Goyal <7895pulkit@gmail.com>
Fri, 08 Jan 2021 21:47:31 +0530
changeset 46239 d159d0fafa78
parent 46238 9796cf108e4e
child 46240 a42502e9ae6d
sharesafe: introduce config to disallow outdated shares if upgrade fails After this patch, we have config option to control all aspects of shares when share source is upgraded or downgraded. Differential Revision: https://phab.mercurial-scm.org/D9692
mercurial/configitems.py
mercurial/upgrade.py
tests/test-share-safe.t
--- a/mercurial/configitems.py	Fri Jan 08 21:34:16 2021 +0530
+++ b/mercurial/configitems.py	Fri Jan 08 21:47:31 2021 +0530
@@ -1084,6 +1084,11 @@
 )
 coreconfigitem(
     b'experimental',
+    b'sharesafe-auto-upgrade-fail-error',
+    default=False,
+)
+coreconfigitem(
+    b'experimental',
     b'sharesafe-warn-outdated-shares',
     default=True,
 )
--- a/mercurial/upgrade.py	Fri Jan 08 21:34:16 2021 +0530
+++ b/mercurial/upgrade.py	Fri Jan 08 21:47:31 2021 +0530
@@ -257,7 +257,12 @@
         current_requirements.add(requirementsmod.SHARESAFE_REQUIREMENT)
         ui.warn(_(b'repository upgraded to use share-safe mode\n'))
     except error.LockError as e:
-        if ui.configbool(b'experimental', b'sharesafe-warn-outdated-shares'):
+        if ui.configbool(b'experimental', b'sharesafe-auto-upgrade-fail-error'):
+            raise error.Abort(
+                _(b'failed to upgrade share, got error: %s')
+                % stringutil.forcebytestr(e.strerror)
+            )
+        elif ui.configbool(b'experimental', b'sharesafe-warn-outdated-shares'):
             ui.warn(
                 _(b'failed to upgrade share, got error: %s\n')
                 % stringutil.forcebytestr(e.strerror)
--- a/tests/test-share-safe.t	Fri Jan 08 21:34:16 2021 +0530
+++ b/tests/test-share-safe.t	Fri Jan 08 21:47:31 2021 +0530
@@ -557,6 +557,10 @@
   o  f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo
   
 
+  $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-auto-upgrade-shares=true --config experimental.sharesafe-auto-upgrade-fail-error=true
+  abort: failed to upgrade share, got error: Lock held
+  [255]
+
   $ rm ../nss-share/.hg/wlock
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share --config experimental.sharesafe-auto-upgrade-shares=true
   repository upgraded to use share-safe mode