Mercurial > hg
comparison mercurial/rcutil.py @ 44031:1864efbe90d9
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
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 29 Dec 2019 21:06:34 -0500 |
parents | 86fe85364811 |
children | 2d4cad94d08a |
comparison
equal
deleted
inserted
replaced
44030:5ac0e6f19eb4 | 44031:1864efbe90d9 |
---|---|
65 '''return rc paths in defaultrc''' | 65 '''return rc paths in defaultrc''' |
66 defaultpath = os.path.join(resourceutil.datapath, b'defaultrc') | 66 defaultpath = os.path.join(resourceutil.datapath, b'defaultrc') |
67 return _expandrcpath(defaultpath) | 67 return _expandrcpath(defaultpath) |
68 | 68 |
69 | 69 |
70 def default_rc_resources(): | |
71 """return rc resource IDs in defaultrc""" | |
72 rsrcs = resourceutil.contents(b'mercurial.defaultrc') | |
73 return [ | |
74 (b'mercurial.defaultrc', r) | |
75 for r in sorted(rsrcs) | |
76 if resourceutil.is_resource(b'mercurial.defaultrc', r) | |
77 and r.endswith(b'.rc') | |
78 ] | |
79 | |
80 | |
70 def rccomponents(): | 81 def rccomponents(): |
71 '''return an ordered [(type, obj)] about where to load configs. | 82 '''return an ordered [(type, obj)] about where to load configs. |
72 | 83 |
73 respect $HGRCPATH. if $HGRCPATH is empty, only .hg/hgrc of current repo is | 84 respect $HGRCPATH. if $HGRCPATH is empty, only .hg/hgrc of current repo is |
74 used. if $HGRCPATH is not set, the platform default will be used. | 85 used. if $HGRCPATH is not set, the platform default will be used. |
75 | 86 |
76 if a directory is provided, *.rc files under it will be used. | 87 if a directory is provided, *.rc files under it will be used. |
77 | 88 |
78 type could be either 'path' or 'items', if type is 'path', obj is a string, | 89 type could be either 'path', 'items' or 'resource'. If type is 'path', |
79 and is the config file path. if type is 'items', obj is a list of (section, | 90 obj is a string, and is the config file path. if type is 'items', obj is a |
80 name, value, source) that should fill the config directly. | 91 list of (section, name, value, source) that should fill the config directly. |
92 If type is 'resource', obj is a tuple of (package name, resource name). | |
81 ''' | 93 ''' |
82 envrc = (b'items', envrcitems()) | 94 envrc = (b'items', envrcitems()) |
83 | 95 |
84 if b'HGRCPATH' in encoding.environ: | 96 if b'HGRCPATH' in encoding.environ: |
85 # assume HGRCPATH is all about user configs so environments can be | 97 # assume HGRCPATH is all about user configs so environments can be |
88 for p in encoding.environ[b'HGRCPATH'].split(pycompat.ospathsep): | 100 for p in encoding.environ[b'HGRCPATH'].split(pycompat.ospathsep): |
89 if not p: | 101 if not p: |
90 continue | 102 continue |
91 _rccomponents.extend((b'path', p) for p in _expandrcpath(p)) | 103 _rccomponents.extend((b'path', p) for p in _expandrcpath(p)) |
92 else: | 104 else: |
105 _rccomponents = [(b'resource', r) for r in default_rc_resources()] | |
106 | |
93 normpaths = lambda paths: [ | 107 normpaths = lambda paths: [ |
94 (b'path', os.path.normpath(p)) for p in paths | 108 (b'path', os.path.normpath(p)) for p in paths |
95 ] | 109 ] |
96 _rccomponents = normpaths(defaultrcpath() + systemrcpath()) | 110 _rccomponents.extend(normpaths(defaultrcpath() + systemrcpath())) |
97 _rccomponents.append(envrc) | 111 _rccomponents.append(envrc) |
98 _rccomponents.extend(normpaths(userrcpath())) | 112 _rccomponents.extend(normpaths(userrcpath())) |
99 return _rccomponents | 113 return _rccomponents |
100 | 114 |
101 | 115 |