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

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

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

dploch (Daniel Ploch)
pulkit created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

  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.

  rHG Mercurial





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
+  $ 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 @@
+    localrepo,
     merge as mergemod,
     mergestate as mergestatemod,
@@ -66,6 +67,7 @@
     ui as uimod,
     verify as verifymod,
+    vfs as vfsmod,
 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')]
             paths = rcutil.userrcpath()

To: pulkit, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
Mercurial-devel mailing list
[hidden email]