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
--- 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