Mercurial > public > mercurial-scm > hg-stable
diff mercurial/commands.py @ 45497:ac7a3da0dbb6
config: add `--shared` flag to edit config file of shared source
With `format.exp-share-safe` enabled, we now read the `.hg/hgrc` of the shared
source also.
This patch adds `--shared` 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.
Differential Revision: https://phab.mercurial-scm.org/D8659
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Thu, 17 Sep 2020 18:49:57 -0700 |
parents | 07c424a13811 |
children | 32ce4cbaec4b |
line wrap: on
line diff
--- a/mercurial/commands.py Thu Jul 02 16:23:36 2020 +0530 +++ b/mercurial/commands.py Thu Sep 17 18:49:57 2020 -0700 @@ -55,6 +55,7 @@ pycompat, rcutil, registrar, + requirements, revsetlang, rewriteutil, scmutil, @@ -66,6 +67,7 @@ ui as uimod, util, verify as verifymod, + vfs as vfsmod, wireprotoserver, ) from .utils import ( @@ -2141,6 +2143,12 @@ (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'shared', + None, + _(b'edit shared source repository config (EXPERIMENTAL)'), + ), (b'g', b'global', None, _(b'edit global config')), ] + formatteropts, @@ -2179,22 +2187,37 @@ :source: String. Filename and line number where the item is defined. :value: String. Config value. + The --shared flag can be used to edit the config file of shared source + repository. It only works when you have shared using the experimental + share safe feature. + 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'shared') 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'shared'): + if not repo.shared(): + raise error.Abort( + _(b"repository is not shared; can't use --shared") + ) + if requirements.SHARESAFE_REQUIREMENT not in repo.requirements: + raise error.Abort( + _( + b"share safe feature not unabled; " + b"unable to edit shared source repository config" + ) + ) + paths = [vfsmod.vfs(repo.sharedpath).join(b'hgrc')] else: paths = rcutil.userrcpath()