Commit 4e118685 authored by Matt Harbison's avatar Matt Harbison
Browse files

ui: add the ability to apply `defaultrc` configs from resources

We will want the ability to cat out these resources, but the same would apply to
templates, so I'm going to wait for the dust to settle on that.  Reading the
default config directly from the filesystem is still in place for now.

Differential Revision: https://phab.mercurial-scm.org/D7776
parent 5ac0e6f19eb4
......@@ -2223,6 +2223,8 @@ def config(ui, repo, *values, **opts):
for t, f in rcutil.rccomponents():
if t == b'path':
ui.debug(b'read config from: %s\n' % f)
elif t == b'resource':
ui.debug(b'read config from: resource:%s.%s\n' % (f[0], f[1]))
elif t == b'items':
# Don't print anything for 'items'.
pass
......
......@@ -67,6 +67,17 @@ def defaultrcpath():
return _expandrcpath(defaultpath)
def default_rc_resources():
"""return rc resource IDs in defaultrc"""
rsrcs = resourceutil.contents(b'mercurial.defaultrc')
return [
(b'mercurial.defaultrc', r)
for r in sorted(rsrcs)
if resourceutil.is_resource(b'mercurial.defaultrc', r)
and r.endswith(b'.rc')
]
def rccomponents():
'''return an ordered [(type, obj)] about where to load configs.
......@@ -75,9 +86,10 @@ def rccomponents():
if a directory is provided, *.rc files under it will be used.
type could be either 'path' or 'items', if type is 'path', obj is a string,
and is the config file path. if type is 'items', obj is a list of (section,
name, value, source) that should fill the config directly.
type could be either 'path', 'items' or 'resource'. If type is 'path',
obj is a string, and is the config file path. if type is 'items', obj is a
list of (section, name, value, source) that should fill the config directly.
If type is 'resource', obj is a tuple of (package name, resource name).
'''
envrc = (b'items', envrcitems())
......@@ -90,10 +102,12 @@ def rccomponents():
continue
_rccomponents.extend((b'path', p) for p in _expandrcpath(p))
else:
_rccomponents = [(b'resource', r) for r in default_rc_resources()]
normpaths = lambda paths: [
(b'path', os.path.normpath(p)) for p in paths
]
_rccomponents = normpaths(defaultrcpath() + systemrcpath())
_rccomponents.extend(normpaths(defaultrcpath() + systemrcpath()))
_rccomponents.append(envrc)
_rccomponents.extend(normpaths(userrcpath()))
return _rccomponents
......
......@@ -308,6 +308,8 @@ class ui(object):
for t, f in rcutil.rccomponents():
if t == b'path':
u.readconfig(f, trust=True)
elif t == b'resource':
u.read_resource_config(f, trust=True)
elif t == b'items':
sections = set()
for section, name, value, source in f:
......
......@@ -37,6 +37,7 @@ def userrcpath():
extensions.wrapfunction(rcutil, 'defaultrcpath', lambda orig: [])
extensions.wrapfunction(rcutil, 'default_rc_resources', lambda orig: [])
rcutil.systemrcpath = systemrcpath
rcutil.userrcpath = userrcpath
......
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