##// END OF EJS Templates
revlog: move the_revisioncache on the inner object...
revlog: move the_revisioncache on the inner object The goal for this inner object is to compute that things we cache, it make more sense to have the inner object handle it directly.

File last commit:

r50704:7a80a614 default
r51989:8ec2de9c default
Show More
scmwindows.py
116 lines | 3.5 KiB | text/x-python | PythonLexer
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 import os
Matt Harbison
windows: drop some py2 registry module importing...
r50704 import winreg # pytype: disable=import-error
Gregory Szorc
scmwindows: use absolute_import
r27481
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 from typing import (
List,
Tuple,
)
Gregory Szorc
scmwindows: use absolute_import
r27481 from . import (
Pulkit Goyal
py3: replace os.environ with encoding.environ (part 4 of 5)
r30637 encoding,
Pulkit Goyal
py3: replace os.pathsep with pycompat.ospathsep...
r30612 pycompat,
Gregory Szorc
scmwindows: use absolute_import
r27481 util,
Yuya Nishihara
scmutil: move util.termwidth()...
r30309 win32,
Gregory Szorc
scmwindows: use absolute_import
r27481 )
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 if pycompat.TYPE_CHECKING:
from . import ui as uimod
Yuya Nishihara
pager: use less as a fallback on Unix...
r32078 # MS-DOS 'more' is the only pager available by default on Windows.
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 fallbackpager = b'more'
Yuya Nishihara
pager: use less as a fallback on Unix...
r32078
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 def systemrcpath() -> List[bytes]:
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 '''return default os-specific hgrc search path'''
rcpath = []
Yuya Nishihara
rcutil: directly call win32.executablepath()...
r37113 filename = win32.executablepath()
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 # Use mercurial.ini found in directory with hg.exe
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 progrc = os.path.join(os.path.dirname(filename), b'mercurial.ini')
Mads Kiilerich
windows: read all global config files, not just the first (issue4491) (BC)...
r26625 rcpath.append(progrc)
Matt Harbison
windows: factor the hgrc directory scan into a function...
r44377
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 def _processdir(progrcd: bytes) -> None:
Matt Harbison
windows: factor the hgrc directory scan into a function...
r44377 if os.path.isdir(progrcd):
Martin von Zweigbergk
config: read system hgrc in lexicographical order...
r46428 for f, kind in sorted(util.listdir(progrcd)):
Matt Harbison
windows: factor the hgrc directory scan into a function...
r44377 if f.endswith(b'.rc'):
rcpath.append(os.path.join(progrcd, f))
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 # Use hgrc.d found in directory with hg.exe
Matt Harbison
windows: factor the hgrc directory scan into a function...
r44377 _processdir(os.path.join(os.path.dirname(filename), b'hgrc.d'))
Matt Harbison
windows: add a global equivalent to /etc/mercurial for *.rc processing...
r44403 # treat a PROGRAMDATA directory as equivalent to /etc/mercurial
programdata = encoding.environ.get(b'PROGRAMDATA')
if programdata:
programdata = os.path.join(programdata, b'Mercurial')
_processdir(os.path.join(programdata, b'hgrc.d'))
ini = os.path.join(programdata, b'mercurial.ini')
if os.path.isfile(ini):
rcpath.append(ini)
ini = os.path.join(programdata, b'hgrc')
if os.path.isfile(ini):
rcpath.append(ini)
Matt Harbison
windows: clarify a comment about the hgrc search path...
r44375 # next look for a system rcpath in the registry
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345 value = util.lookupreg(
Matt Harbison
pytype: disable a few errors about Windows specific module attributes...
r49843 # pytype: disable=module-attr
b'SOFTWARE\\Mercurial',
None,
winreg.HKEY_LOCAL_MACHINE
# pytype: enable=module-attr
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345 )
Matt Harbison
windows: don't return early from building the hgrc search path...
r44376 if value and isinstance(value, bytes):
value = util.localpath(value)
for p in value.split(pycompat.ospathsep):
if p.lower().endswith(b'mercurial.ini'):
rcpath.append(p)
Matt Harbison
windows: factor the hgrc directory scan into a function...
r44377 else:
_processdir(p)
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 return rcpath
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 def userrcpath() -> List[bytes]:
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 '''return os-specific hgrc search path to the user dir'''
Matt Harbison
windows: continue looking at `%HOME%` for user config files with py3.8+...
r46709 home = _legacy_expanduser(b'~')
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 path = [os.path.join(home, b'mercurial.ini'), os.path.join(home, b'.hgrc')]
userprofile = encoding.environ.get(b'USERPROFILE')
Mads Kiilerich
config: don't read the same config file twice...
r22583 if userprofile and userprofile != home:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 path.append(os.path.join(userprofile, b'mercurial.ini'))
path.append(os.path.join(userprofile, b'.hgrc'))
Kevin Bullock
scmutil: split platform-specific bits into their own modules...
r18690 return path
Yuya Nishihara
scmutil: move util.termwidth()...
r30309
Augie Fackler
style: run a patched black on a subset of mercurial...
r43345
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 def _legacy_expanduser(path: bytes) -> bytes:
Matt Harbison
windows: continue looking at `%HOME%` for user config files with py3.8+...
r46709 """Expand ~ and ~user constructs in the pre 3.8 style"""
# Python 3.8+ changed the expansion of '~' from HOME to USERPROFILE. See
# https://bugs.python.org/issue36264. It also seems to capitalize the drive
# letter, as though it was processed through os.path.realpath().
if not path.startswith(b'~'):
return path
i, n = 1, len(path)
while i < n and path[i] not in b'\\/':
i += 1
if b'HOME' in encoding.environ:
userhome = encoding.environ[b'HOME']
elif b'USERPROFILE' in encoding.environ:
userhome = encoding.environ[b'USERPROFILE']
elif b'HOMEPATH' not in encoding.environ:
return path
else:
try:
drive = encoding.environ[b'HOMEDRIVE']
except KeyError:
drive = b''
userhome = os.path.join(drive, encoding.environ[b'HOMEPATH'])
if i != 1: # ~user
userhome = os.path.join(os.path.dirname(userhome), path[1:i])
return userhome + path[i:]
Matt Harbison
typing: add type hints to the platform specific scm modules...
r50703 def termsize(ui: "uimod.ui") -> Tuple[int, int]:
Yuya Nishihara
scmutil: extend termwidth() to return terminal height, renamed to termsize()...
r30314 return win32.termsize()