diff --git a/mercurial/configitems.py b/mercurial/configitems.py --- a/mercurial/configitems.py +++ b/mercurial/configitems.py @@ -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, ) diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py --- a/mercurial/upgrade.py +++ b/mercurial/upgrade.py @@ -293,7 +293,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\n') + % 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) diff --git a/tests/test-share-safe.t b/tests/test-share-safe.t --- a/tests/test-share-safe.t +++ b/tests/test-share-safe.t @@ -557,6 +557,11 @@ 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