Patchwork D9369: share: show warning if share is outdated while source supports share-safe

mail settings
Submitter phabricator
Date Nov. 23, 2020, 9:29 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/47648/
State Superseded
Headers show


phabricator - Nov. 23, 2020, 9:29 a.m.
pulkit created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

  Previous patches in the series and some which are already committed implements
  share safe functionality where config and requirements will be shared too.
  Rolling this feature has a problem that existing shares may never upgrade as
  they will never learn about the new config. To help the transition, we show a
  warning messafe if the share source supports share-safe mechanism. This provides
  the source repo ability to upgrade and pass on the message to shares that you
  should reshare and upgrade too.

  rHG Mercurial




To: pulkit, #hg-reviewers
Cc: mercurial-patches, mercurial-devel


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
@@ -373,6 +373,7 @@ 
 Make sure existing shares still works
   $ hg log -GT "{node}: {desc}\n" -R ../nss-share
+  warning: source repository supports share-safe functionality. Reshare to upgrade.
   @  f63db81e6dde1d9c78814167f77fb1fb49283f4f: added bar
   o  f3ba8b99bb6f897c87bbc1c07b75c6ddf43a4f77: added foo
diff --git a/mercurial/ b/mercurial/
--- a/mercurial/
+++ b/mercurial/
@@ -558,6 +558,11 @@ 
     # NOTE: presence of SHARESAFE_REQUIREMENT imply that store requirement
     # is present. We never write SHARESAFE_REQUIREMENT for a repo if store
     # is not present, refer checkrequirementscompat() for that
+    #
+    # However, if SHARESAFE_REQUIREMENT is not present, it means that the
+    # 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
     if requirementsmod.SHARESAFE_REQUIREMENT in requirements:
         if shared:
             # This is a shared repo
@@ -566,6 +571,15 @@ 
             storevfs = vfsmod.vfs(hgvfs.join(b'store'))
         requirements |= _readrequires(storevfs, False)
+    elif shared:
+        sourcerequires = _readrequires(sharedvfs, False)
+        if requirementsmod.SHARESAFE_REQUIREMENT in sourcerequires:
+            ui.warn(
+                _(
+                    'warning: source repository supports share-safe functionality.'
+                    ' Reshare to upgrade.\n'
+                )
+            )
     # The .hg/hgrc file may load extensions or contain config options
     # that influence repository construction. Attempt to load it and