Mercurial > hg
view mercurial/scmposix.py @ 51232:3551f2a1c963
debugindexstats: handle the lack of Rust support better
We don't have any stats in the Rust index. Currently it is not known which
stats would be interesting to get, so if they end up being important, we can
add them later.
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Tue, 31 Oct 2023 18:09:43 +0100 |
parents | 18c8c18993f0 |
children | 9d3721552b6c |
line wrap: on
line source
import array import errno import fcntl import os import sys from typing import ( List, Tuple, ) from . import ( encoding, pycompat, util, ) if pycompat.TYPE_CHECKING: from . import ui as uimod # BSD 'more' escapes ANSI color sequences by default. This can be disabled by # $MORE variable, but there's no compatible option with Linux 'more'. Given # OS X is widely used and most modern Unix systems would have 'less', setting # 'less' as the default seems reasonable. fallbackpager = b'less' def _rcfiles(path: bytes) -> List[bytes]: rcs = [os.path.join(path, b'hgrc')] rcdir = os.path.join(path, b'hgrc.d') try: rcs.extend( [ os.path.join(rcdir, f) for f, kind in sorted(util.listdir(rcdir)) if f.endswith(b".rc") ] ) except OSError: pass return rcs def systemrcpath() -> List[bytes]: path = [] if pycompat.sysplatform == b'plan9': root = b'lib/mercurial' else: root = b'etc/mercurial' # old mod_python does not set sys.argv if len(getattr(sys, 'argv', [])) > 0: p = os.path.dirname(os.path.dirname(pycompat.sysargv[0])) if p != b'/': path.extend(_rcfiles(os.path.join(p, root))) path.extend(_rcfiles(b'/' + root)) return path def userrcpath() -> List[bytes]: if pycompat.sysplatform == b'plan9': return [encoding.environ[b'home'] + b'/lib/hgrc'] elif pycompat.isdarwin: return [os.path.expanduser(b'~/.hgrc')] else: confighome = encoding.environ.get(b'XDG_CONFIG_HOME') if confighome is None or not os.path.isabs(confighome): confighome = os.path.expanduser(b'~/.config') return [ os.path.expanduser(b'~/.hgrc'), os.path.join(confighome, b'hg', b'hgrc'), ] def termsize(ui: "uimod.ui") -> Tuple[int, int]: try: import termios TIOCGWINSZ = termios.TIOCGWINSZ # unavailable on IRIX (issue3449) except (AttributeError, ImportError): return 80, 24 for dev in (ui.ferr, ui.fout, ui.fin): try: try: fd = dev.fileno() except AttributeError: continue if not os.isatty(fd): continue arri = fcntl.ioctl(fd, TIOCGWINSZ, b'\0' * 8) height, width = array.array('h', arri)[:2] if width > 0 and height > 0: return width, height except ValueError: pass except IOError as e: if e.errno == errno.EINVAL: pass else: raise return 80, 24