24 |
32 |
25 fallbackpager = scmplatform.fallbackpager |
33 fallbackpager = scmplatform.fallbackpager |
26 systemrcpath = scmplatform.systemrcpath |
34 systemrcpath = scmplatform.systemrcpath |
27 userrcpath = scmplatform.userrcpath |
35 userrcpath = scmplatform.userrcpath |
28 |
36 |
|
37 ConfigItemT = Tuple[bytes, bytes, bytes, bytes] |
|
38 ResourceIDT = Tuple[bytes, bytes] |
|
39 FileRCT = bytes |
|
40 ComponentT = Tuple[ |
|
41 bytes, |
|
42 Union[ |
|
43 List[ConfigItemT], |
|
44 FileRCT, |
|
45 ResourceIDT, |
|
46 ], |
|
47 ] |
29 |
48 |
30 def _expandrcpath(path): |
49 |
|
50 def _expandrcpath(path: bytes) -> List[FileRCT]: |
31 '''path could be a file or a directory. return a list of file paths''' |
51 '''path could be a file or a directory. return a list of file paths''' |
32 p = util.expandpath(path) |
52 p = util.expandpath(path) |
33 if os.path.isdir(p): |
53 if os.path.isdir(p): |
34 join = os.path.join |
54 join = os.path.join |
35 return sorted( |
55 return sorted( |
36 join(p, f) for f, k in util.listdir(p) if f.endswith(b'.rc') |
56 join(p, f) for f, k in util.listdir(p) if f.endswith(b'.rc') |
37 ) |
57 ) |
38 return [p] |
58 return [p] |
39 |
59 |
40 |
60 |
41 def envrcitems(env=None): |
61 def envrcitems(env: Optional[Dict[bytes, bytes]] = None) -> List[ConfigItemT]: |
42 """Return [(section, name, value, source)] config items. |
62 """Return [(section, name, value, source)] config items. |
43 |
63 |
44 The config items are extracted from environment variables specified by env, |
64 The config items are extracted from environment variables specified by env, |
45 used to override systemrc, but not userrc. |
65 used to override systemrc, but not userrc. |
46 |
66 |
59 continue |
79 continue |
60 result.append((section, configname, env[envname], b'$%s' % envname)) |
80 result.append((section, configname, env[envname], b'$%s' % envname)) |
61 return result |
81 return result |
62 |
82 |
63 |
83 |
64 def default_rc_resources(): |
84 def default_rc_resources() -> List[ResourceIDT]: |
65 """return rc resource IDs in defaultrc""" |
85 """return rc resource IDs in defaultrc""" |
66 rsrcs = resourceutil.contents(b'mercurial.defaultrc') |
86 rsrcs = resourceutil.contents(b'mercurial.defaultrc') |
67 return [ |
87 return [ |
68 (b'mercurial.defaultrc', r) |
88 (b'mercurial.defaultrc', r) |
69 for r in sorted(rsrcs) |
89 for r in sorted(rsrcs) |
70 if resourceutil.is_resource(b'mercurial.defaultrc', r) |
90 if resourceutil.is_resource(b'mercurial.defaultrc', r) |
71 and r.endswith(b'.rc') |
91 and r.endswith(b'.rc') |
72 ] |
92 ] |
73 |
93 |
74 |
94 |
75 def rccomponents(): |
95 def rccomponents() -> List[ComponentT]: |
76 """return an ordered [(type, obj)] about where to load configs. |
96 """return an ordered [(type, obj)] about where to load configs. |
77 |
97 |
78 respect $HGRCPATH. if $HGRCPATH is empty, only .hg/hgrc of current repo is |
98 respect $HGRCPATH. if $HGRCPATH is empty, only .hg/hgrc of current repo is |
79 used. if $HGRCPATH is not set, the platform default will be used. |
99 used. if $HGRCPATH is not set, the platform default will be used. |
80 |
100 |
105 _rccomponents.append(envrc) |
125 _rccomponents.append(envrc) |
106 _rccomponents.extend(normpaths(userrcpath())) |
126 _rccomponents.extend(normpaths(userrcpath())) |
107 return _rccomponents |
127 return _rccomponents |
108 |
128 |
109 |
129 |
110 def defaultpagerenv(): |
130 def defaultpagerenv() -> Dict[bytes, bytes]: |
111 """return a dict of default environment variables and their values, |
131 """return a dict of default environment variables and their values, |
112 intended to be set before starting a pager. |
132 intended to be set before starting a pager. |
113 """ |
133 """ |
114 return {b'LESS': b'FRX', b'LV': b'-c'} |
134 return {b'LESS': b'FRX', b'LV': b'-c'} |
115 |
135 |
116 |
136 |
117 def use_repo_hgrc(): |
137 def use_repo_hgrc() -> bool: |
118 """True if repositories `.hg/hgrc` config should be read""" |
138 """True if repositories `.hg/hgrc` config should be read""" |
119 return b'HGRCSKIPREPO' not in encoding.environ |
139 return b'HGRCSKIPREPO' not in encoding.environ |