Mercurial > public > mercurial-scm > hg-stable
changeset 52447:0a81f3ef054c
config: move `rcutil` module under a new `mercurial.configuration` module
This new module aims at gathering configuration related code, rcutil definitely
deserves to live there.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 21 Oct 2024 13:39:44 +0200 |
parents | 4eec920bbb37 |
children | c97e0fd26225 |
files | hgext/zeroconf/__init__.py mercurial/commands.py mercurial/configuration/__init__.py mercurial/configuration/rcutil.py mercurial/dispatch.py mercurial/hgweb/hgwebdir_mod.py mercurial/localrepo.py mercurial/rcutil.py mercurial/ui.py setup.py tests/test-config-env.py |
diffstat | 10 files changed, 127 insertions(+), 128 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/zeroconf/__init__.py Thu Dec 05 18:07:55 2024 +0100 +++ b/hgext/zeroconf/__init__.py Mon Oct 21 13:39:44 2024 +0200 @@ -36,9 +36,9 @@ extensions, hg, pycompat, - rcutil, ui as uimod, ) +from mercurial.configuration import rcutil from mercurial.hgweb import server as servermod # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
--- a/mercurial/commands.py Thu Dec 05 18:07:55 2024 +0100 +++ b/mercurial/commands.py Mon Oct 21 13:39:44 2024 +0200 @@ -52,7 +52,6 @@ patch, phases, pycompat, - rcutil, registrar, requirements, revsetlang, @@ -70,7 +69,7 @@ ) from .cmd_impls import graft as graft_impl - +from .configuration import rcutil from .utils import ( dateutil, procutil,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/configuration/rcutil.py Mon Oct 21 13:39:44 2024 +0200 @@ -0,0 +1,119 @@ +# rcutil.py - utilities about config paths, special config sections etc. +# +# Copyright Mercurial Contributors +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +from __future__ import annotations + +import os + +from .. import ( + encoding, + pycompat, + util, +) + +from ..utils import resourceutil + +if pycompat.iswindows: + from .. import scmwindows as scmplatform +else: + from .. import scmposix as scmplatform + +fallbackpager = scmplatform.fallbackpager +systemrcpath = scmplatform.systemrcpath +userrcpath = scmplatform.userrcpath + + +def _expandrcpath(path): + '''path could be a file or a directory. return a list of file paths''' + p = util.expandpath(path) + if os.path.isdir(p): + join = os.path.join + return sorted( + join(p, f) for f, k in util.listdir(p) if f.endswith(b'.rc') + ) + return [p] + + +def envrcitems(env=None): + """Return [(section, name, value, source)] config items. + + The config items are extracted from environment variables specified by env, + used to override systemrc, but not userrc. + + If env is not provided, encoding.environ will be used. + """ + if env is None: + env = encoding.environ + checklist = [ + (b'EDITOR', b'ui', b'editor'), + (b'VISUAL', b'ui', b'editor'), + (b'PAGER', b'pager', b'pager'), + ] + result = [] + for envname, section, configname in checklist: + if envname not in env: + continue + result.append((section, configname, env[envname], b'$%s' % envname)) + return result + + +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. + + respect $HGRCPATH. if $HGRCPATH is empty, only .hg/hgrc of current repo is + used. if $HGRCPATH is not set, the platform default will be used. + + if a directory is provided, *.rc files under it will be used. + + 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()) + + if b'HGRCPATH' in encoding.environ: + # assume HGRCPATH is all about user configs so environments can be + # overridden. + _rccomponents = [envrc] + for p in encoding.environ[b'HGRCPATH'].split(pycompat.ospathsep): + if not p: + 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.extend(normpaths(systemrcpath())) + _rccomponents.append(envrc) + _rccomponents.extend(normpaths(userrcpath())) + return _rccomponents + + +def defaultpagerenv(): + """return a dict of default environment variables and their values, + intended to be set before starting a pager. + """ + return {b'LESS': b'FRX', b'LV': b'-c'} + + +def use_repo_hgrc(): + """True if repositories `.hg/hgrc` config should be read""" + return b'HGRCSKIPREPO' not in encoding.environ
--- a/mercurial/dispatch.py Thu Dec 05 18:07:55 2024 +0100 +++ b/mercurial/dispatch.py Mon Oct 21 13:39:44 2024 +0200 @@ -37,7 +37,6 @@ localrepo, profiling, pycompat, - rcutil, registrar, requirements as requirementsmod, scmutil, @@ -46,6 +45,7 @@ vfs, ) +from .configuration import rcutil from .utils import ( procutil, stringutil,
--- a/mercurial/hgweb/hgwebdir_mod.py Thu Dec 05 18:07:55 2024 +0100 +++ b/mercurial/hgweb/hgwebdir_mod.py Mon Oct 21 13:39:44 2024 +0200 @@ -35,7 +35,6 @@ pathutil, profiling, pycompat, - rcutil, registrar, scmutil, templater, @@ -50,6 +49,7 @@ webutil, wsgicgi, ) +from ..configuration import rcutil from ..utils import dateutil
--- a/mercurial/localrepo.py Thu Dec 05 18:07:55 2024 +0100 +++ b/mercurial/localrepo.py Mon Oct 21 13:39:44 2024 +0200 @@ -59,7 +59,6 @@ policy, pushkey, pycompat, - rcutil, repoview, requirements as requirementsmod, revlog, @@ -80,7 +79,7 @@ from .branching import ( rev_cache as rev_branch_cache, ) - +from .configuration import rcutil from .interfaces import ( repository, )
--- a/mercurial/rcutil.py Thu Dec 05 18:07:55 2024 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -# rcutil.py - utilities about config paths, special config sections etc. -# -# Copyright Mercurial Contributors -# -# This software may be used and distributed according to the terms of the -# GNU General Public License version 2 or any later version. - -from __future__ import annotations - -import os - -from . import ( - encoding, - pycompat, - util, -) - -from .utils import resourceutil - -if pycompat.iswindows: - from . import scmwindows as scmplatform -else: - from . import scmposix as scmplatform - -fallbackpager = scmplatform.fallbackpager -systemrcpath = scmplatform.systemrcpath -userrcpath = scmplatform.userrcpath - - -def _expandrcpath(path): - '''path could be a file or a directory. return a list of file paths''' - p = util.expandpath(path) - if os.path.isdir(p): - join = os.path.join - return sorted( - join(p, f) for f, k in util.listdir(p) if f.endswith(b'.rc') - ) - return [p] - - -def envrcitems(env=None): - """Return [(section, name, value, source)] config items. - - The config items are extracted from environment variables specified by env, - used to override systemrc, but not userrc. - - If env is not provided, encoding.environ will be used. - """ - if env is None: - env = encoding.environ - checklist = [ - (b'EDITOR', b'ui', b'editor'), - (b'VISUAL', b'ui', b'editor'), - (b'PAGER', b'pager', b'pager'), - ] - result = [] - for envname, section, configname in checklist: - if envname not in env: - continue - result.append((section, configname, env[envname], b'$%s' % envname)) - return result - - -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. - - respect $HGRCPATH. if $HGRCPATH is empty, only .hg/hgrc of current repo is - used. if $HGRCPATH is not set, the platform default will be used. - - if a directory is provided, *.rc files under it will be used. - - 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()) - - if b'HGRCPATH' in encoding.environ: - # assume HGRCPATH is all about user configs so environments can be - # overridden. - _rccomponents = [envrc] - for p in encoding.environ[b'HGRCPATH'].split(pycompat.ospathsep): - if not p: - 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.extend(normpaths(systemrcpath())) - _rccomponents.append(envrc) - _rccomponents.extend(normpaths(userrcpath())) - return _rccomponents - - -def defaultpagerenv(): - """return a dict of default environment variables and their values, - intended to be set before starting a pager. - """ - return {b'LESS': b'FRX', b'LV': b'-c'} - - -def use_repo_hgrc(): - """True if repositories `.hg/hgrc` config should be read""" - return b'HGRCSKIPREPO' not in encoding.environ
--- a/mercurial/ui.py Thu Dec 05 18:07:55 2024 +0100 +++ b/mercurial/ui.py Mon Oct 21 13:39:44 2024 +0200 @@ -50,10 +50,10 @@ loggingutil, progress, pycompat, - rcutil, scmutil, util, ) +from .configuration import rcutil from .utils import ( dateutil, procutil,
--- a/setup.py Thu Dec 05 18:07:55 2024 +0100 +++ b/setup.py Mon Oct 21 13:39:44 2024 +0200 @@ -1359,6 +1359,7 @@ 'mercurial.cext', 'mercurial.cffi', 'mercurial.cmd_impls', + 'mercurial.configuration', 'mercurial.branching', 'mercurial.defaultrc', 'mercurial.dirstateutils',
--- a/tests/test-config-env.py Thu Dec 05 18:07:55 2024 +0100 +++ b/tests/test-config-env.py Mon Oct 21 13:39:44 2024 +0200 @@ -6,11 +6,11 @@ from mercurial import ( encoding, extensions, - rcutil, ui as uimod, util, ) +from mercurial.configuration import rcutil from mercurial.utils import procutil testtmp = encoding.environ[b'TESTTMP']