Mercurial > public > mercurial-scm > hg
view mercurial/scmposix.py @ 30310:5c379b1f56c7
scmutil: make termwidth() obtain stdio from ui
I'm getting rid of direct sys.stderr|out|in references so Py3 porting will
be slightly easier.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 20 Oct 2016 21:42:11 +0900 |
parents | 4b1af1c867fa |
children | 80708959161a |
line wrap: on
line source
from __future__ import absolute_import import errno import fcntl import os import sys from . import ( encoding, osutil, ) def _rcfiles(path): rcs = [os.path.join(path, 'hgrc')] rcdir = os.path.join(path, 'hgrc.d') try: rcs.extend([os.path.join(rcdir, f) for f, kind in osutil.listdir(rcdir) if f.endswith(".rc")]) except OSError: pass return rcs def systemrcpath(): path = [] if sys.platform == 'plan9': root = 'lib/mercurial' else: root = 'etc/mercurial' # old mod_python does not set sys.argv if len(getattr(sys, 'argv', [])) > 0: p = os.path.dirname(os.path.dirname(sys.argv[0])) if p != '/': path.extend(_rcfiles(os.path.join(p, root))) path.extend(_rcfiles('/' + root)) return path def userrcpath(): if sys.platform == 'plan9': return [encoding.environ['home'] + '/lib/hgrc'] else: return [os.path.expanduser('~/.hgrc')] def termwidth(ui): try: import array import termios for dev in (ui.ferr, ui.fout, ui.fin): try: try: fd = dev.fileno() except AttributeError: continue if not os.isatty(fd): continue try: arri = fcntl.ioctl(fd, termios.TIOCGWINSZ, '\0' * 8) width = array.array('h', arri)[1] if width > 0: return width except AttributeError: pass except ValueError: pass except IOError as e: if e[0] == errno.EINVAL: pass else: raise except ImportError: pass return 80