Patchwork D8659: config: add `--share` flag to edit config file of shared source

login
register
mail settings
Submitter phabricator
Date June 25, 2020, 8:55 a.m.
Message ID <differential-rev-PHID-DREV-llvp6cugrf6ueoaksk62-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/46564/
State New
Headers show

Comments

phabricator - June 25, 2020, 8:55 a.m.
pulkit created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  With `format.exp-share-safe` enabled, we now read the `.hg/hgrc` of the shared
  source also.
  This patch adds `--share` flag to `hg config` command which can be used to edit
  that shared source config file. It only works if the repository is shared one
  and is shared using the safe method.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D8659

AFFECTED FILES
  mercurial/commands.py
  tests/test-share-safe.t

CHANGE DETAILS




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

Patch

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
@@ -33,6 +33,10 @@ 
   $ hg ci -Aqm "added a"
   $ echo b > b
   $ hg ci -Aqm "added b"
+
+  $ HGEDITOR=cat hg config --share
+  abort: repository is not shared one, can't use --share
+  [255]
   $ cd ..
 
 Create a shared repo and check the requirements are shared and read correctly
@@ -85,4 +89,12 @@ 
   $ hg showconfig ui.curses
   false
 
+  $ HGEDITOR=cat hg config --share
+  [ui]
+  curses=true
+
+  $ HGEDITOR=cat hg config --local
+  [ui]
+  curses=false
+
   $ hg unshare
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -44,6 +44,7 @@ 
     hbisect,
     help,
     hg,
+    localrepo,
     logcmdutil,
     merge as mergemod,
     mergestate as mergestatemod,
@@ -66,6 +67,7 @@ 
     ui as uimod,
     util,
     verify as verifymod,
+    vfs as vfsmod,
     wireprotoserver,
 )
 from .utils import (
@@ -2141,6 +2143,7 @@ 
         (b'u', b'untrusted', None, _(b'show untrusted configuration options')),
         (b'e', b'edit', None, _(b'edit user config')),
         (b'l', b'local', None, _(b'edit repository config')),
+        (b'', b'share', None, _(b'edit share source config (EXPERIMENTAL)')),
         (b'g', b'global', None, _(b'edit global config')),
     ]
     + formatteropts,
@@ -2179,22 +2182,34 @@ 
       :source:  String. Filename and line number where the item is defined.
       :value:   String. Config value.
 
+      The --share flag can be used to edit the config file of share source
+      repository. It only works when you have shared using the experimental safe
+      method.
+
     Returns 0 on success, 1 if NAME does not exist.
 
     """
 
     opts = pycompat.byteskwargs(opts)
-    editopts = [b'edit', b'local', b'global']
+    editopts = [b'edit', b'local', b'global', b'share']
     if any(opts.get(o) for o in editopts):
-        if opts.get(b'local') and opts.get(b'global'):
-            raise error.Abort(_(b"can't use --local and --global together"))
-
+        cmdutil.check_at_most_one_arg(opts, *editopts[1:])
         if opts.get(b'local'):
             if not repo:
                 raise error.Abort(_(b"can't use --local outside a repository"))
             paths = [repo.vfs.join(b'hgrc')]
         elif opts.get(b'global'):
             paths = rcutil.systemrcpath()
+        elif opts.get(b'share'):
+            if not repo.shared():
+                raise error.Abort(
+                    _(b"repository is not shared one, can't use --share")
+                )
+                if localrepo.SHARESAFE_REQUIREMENT not in repo.requirements:
+                    raise error.Abort(
+                        _(b"this does not support editing share source config")
+                    )
+            paths = [vfsmod.vfs(repo.sharedpath).join(b'hgrc')]
         else:
             paths = rcutil.userrcpath()