Commit a41a0d70 authored by Pulkit Goyal's avatar Pulkit Goyal
Browse files

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
parent b71858b42963
......@@ -55,6 +55,7 @@ from . import (
pycompat,
rcutil,
registrar,
requirements,
revsetlang,
rewriteutil,
scmutil,
......@@ -66,6 +67,7 @@ from . import (
ui as uimod,
util,
verify as verifymod,
vfs as vfsmod,
wireprotoserver,
)
from .utils import (
......@@ -2141,6 +2143,12 @@ def _docommit(ui, repo, *pats, **opts):
(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 @@ def config(ui, repo, *values, **opts):
: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()
......
......@@ -258,7 +258,7 @@ Show all commands + options
cat: output, rev, decode, include, exclude, template
clone: noupdate, updaterev, rev, branch, pull, uncompressed, stream, ssh, remotecmd, insecure
commit: addremove, close-branch, amend, secret, edit, force-close-branch, interactive, include, exclude, message, logfile, date, user, subrepos
config: untrusted, edit, local, global, template
config: untrusted, edit, local, shared, global, template
continue: dry-run
copy: forget, after, at-rev, force, include, exclude, dry-run
debugancestor:
......
......@@ -33,6 +33,10 @@ prepare source repo
$ hg ci -Aqm "added a"
$ echo b > b
$ hg ci -Aqm "added b"
$ HGEDITOR=cat hg config --shared
abort: repository is not shared; can't use --shared
[255]
$ cd ..
Create a shared repo and check the requirements are shared and read correctly
......@@ -85,6 +89,14 @@ However, local .hg/hgrc should override the config set by share source
$ hg showconfig ui.curses
false
$ HGEDITOR=cat hg config --shared
[ui]
curses=true
$ HGEDITOR=cat hg config --local
[ui]
curses=false
Testing that hooks set in source repository also runs in shared repo
$ cd ../source
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment