[Updated] D9680: sharesafe: add functionality to automatically downgrade shares
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Thu Jan 7 11:48:30 UTC 2021
pulkit updated this revision to Diff 24625.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D9680?vs=24621&id=24625
BRANCH
default
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D9680/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D9680
AFFECTED FILES
mercurial/configitems.py
mercurial/localrepo.py
mercurial/upgrade.py
tests/test-share-safe.t
CHANGE DETAILS
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
@@ -484,6 +484,20 @@
abort: share source does not support exp-sharesafe requirement
[255]
+Testing automatic downgrade of shares when config is set
+ $ hg log -GT "{node}: {desc}\n" -R ../ss-share --config experimental.sharesafe-auto-downgrade-shares=true
+ repository downgraded to not use share-safe mode
+ @ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar
+ |
+ o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo
+
+
+ $ hg log -GT "{node}: {desc}\n" -R ../ss-share
+ @ f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar
+ |
+ o f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo
+
+
Testing automatic upgrade of shares when config is set
diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py
--- a/mercurial/upgrade.py
+++ b/mercurial/upgrade.py
@@ -12,7 +12,10 @@
error,
hg,
localrepo,
+ lock as lockmod,
pycompat,
+ requirements as requirementsmod,
+ scmutil,
)
from .upgrade_utils import (
@@ -300,3 +303,32 @@
if wlock:
wlock.release()
return current_requirements
+
+
+def downgrade_share_to_non_safe(
+ ui, hgvfs, current_requirements, source_requirements
+):
+ """Downgrades a share which use share-safe to not use it
+
+ Returns the set of new repository requirements
+ """
+ wlock = None
+ try:
+ wlock = lockmod.trylock(ui, hgvfs, b'wlock', 0, 0)
+ # we cannot be 100% sure on which requirements were present in store when
+ # the source supported share-safe. However, we do know that working
+ # directory requirements were not there. Hence we remove them
+ source_requirements -= requirementsmod.WORKING_DIR_REQUIREMENTS
+ current_requirements |= source_requirements
+ current_requirements.remove(requirementsmod.SHARESAFE_REQUIREMENT)
+ scmutil.writerequires(hgvfs, current_requirements)
+ ui.warn(_(b'repository downgraded to not use share-safe mode\n'))
+ except Exception as e:
+ ui.warn(
+ _(b'failed to downgrade share, got error: %s')
+ % stringutil.forcebytestr(e)
+ )
+ finally:
+ if wlock:
+ wlock.release()
+ return current_requirements
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -574,11 +574,24 @@
and requirementsmod.SHARESAFE_REQUIREMENT
not in _readrequires(sharedvfs, True)
):
- raise error.Abort(
- _(b"share source does not support exp-sharesafe requirement")
- )
-
- requirements |= _readrequires(storevfs, False)
+ if ui.configbool(
+ b'experimental', b'sharesafe-auto-downgrade-shares'
+ ):
+ sourcerequires = _readrequires(sharedvfs, True)
+ # prevent cyclic import localrepo -> upgrade -> localrepo
+ from . import upgrade
+
+ requirements = upgrade.downgrade_share_to_non_safe(
+ ui, hgvfs, requirements, sourcerequires
+ )
+ else:
+ raise error.Abort(
+ _(
+ b"share source does not support exp-sharesafe requirement"
+ )
+ )
+ else:
+ requirements |= _readrequires(storevfs, False)
elif shared:
sourcerequires = _readrequires(sharedvfs, False)
if requirementsmod.SHARESAFE_REQUIREMENT in sourcerequires:
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -1074,6 +1074,11 @@
)
coreconfigitem(
b'experimental',
+ b'sharesafe-auto-downgrade-shares',
+ default=False,
+)
+coreconfigitem(
+ b'experimental',
b'sharesafe-auto-upgrade-shares',
default=False,
)
To: pulkit, #hg-reviewers, marmoute
Cc: marmoute, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20210107/f437e526/attachment-0002.html>
More information about the Mercurial-patches
mailing list