mercurial/configuration/rcutil.py
changeset 52420 91f22b89ea05
parent 52416 0a81f3ef054c
child 52423 0b791c90280a
equal deleted inserted replaced
52419:04c3fb885fb6 52420:91f22b89ea05
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     7 
     7 
     8 from __future__ import annotations
     8 from __future__ import annotations
     9 
     9 
    10 import os
    10 import os
       
    11 
       
    12 from typing import (
       
    13     Dict,
       
    14     List,
       
    15     Optional,
       
    16     Tuple,
       
    17     Union,
       
    18 )
    11 
    19 
    12 from .. import (
    20 from .. import (
    13     encoding,
    21     encoding,
    14     pycompat,
    22     pycompat,
    15     util,
    23     util,
    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