[PATCH] util: add helper function isatty(fd) to check for tty-ness

Matt Mackall mpm at selenic.com
Thu Jun 2 14:29:18 CDT 2011


On Thu, 2011-06-02 at 13:05 -0500, Augie Fackler wrote:
> On Thu, Jun 2, 2011 at 11:28 AM, Idan Kamara <idankk86 at gmail.com> wrote:
> > # HG changeset patch
> > # User Idan Kamara <idankk86 at gmail.com>
> > # Date 1306964614 -10800
> > # Node ID d12139042af43407d347d812b9dcd3cbdc103966
> > # Parent  970d8d9b69004d550ec5e33f529de118033047ab
> > util: add helper function isatty(fd) to check for tty-ness
> >
> > diff -r 970d8d9b6900 -r d12139042af4 hgext/pager.py
> > --- a/hgext/pager.py    Thu Jun 02 19:16:45 2011 +0300
> > +++ b/hgext/pager.py    Thu Jun 02 00:43:34 2011 +0300
> > @@ -60,7 +60,7 @@
> >  def _runpager(p):
> >     if not hasattr(os, 'fork'):
> >         sys.stdout = util.popen(p, 'wb')
> > -        if sys.stderr.isatty():
> > +        if util.isatty(sys.stderr):
> >             sys.stderr = sys.stdout
> >         return
> >     fdin, fdout = os.pipe()
> > @@ -68,7 +68,7 @@
> >     if pid == 0:
> >         os.close(fdin)
> >         os.dup2(fdout, sys.stdout.fileno())
> > -        if sys.stderr.isatty():
> > +        if util.isatty(sys.stderr):
> >             os.dup2(fdout, sys.stderr.fileno())
> >         os.close(fdout)
> >         return
> > @@ -86,12 +86,13 @@
> >             raise
> >
> >  def uisetup(ui):
> > -    if ui.plain():
> > +    if ui.plain() or '--debugger' in sys.argv or not util.isatty(sys.stdout):
> >         return
> >
> >     def pagecmd(orig, ui, options, cmd, cmdfunc):
> >         p = ui.config("pager", "pager", os.environ.get("PAGER"))
> > -        if p and sys.stdout.isatty() and '--debugger' not in sys.argv:
> > +
> > +        if p:
> >             attend = ui.configlist('pager', 'attend', attended)
> >             auto = options['pager'] == 'auto'
> >             always = util.parsebool(options['pager'])
> > diff -r 970d8d9b6900 -r d12139042af4 hgext/progress.py
> > --- a/hgext/progress.py Thu Jun 02 19:16:45 2011 +0300
> > +++ b/hgext/progress.py Thu Jun 02 00:43:34 2011 +0300
> > @@ -46,14 +46,14 @@
> >  import sys
> >  import time
> >
> > +from mercurial import util
> >  from mercurial.i18n import _
> >
> >  def spacejoin(*args):
> >     return ' '.join(s for s in args if s)
> >
> >  def shouldprint(ui):
> > -    return (getattr(sys.stderr, 'isatty', None) and
> > -            (sys.stderr.isatty() or ui.configbool('progress', 'assume-tty')))
> > +    return (util.isatty(sys.stderr) or ui.configbool('progress', 'assume-tty'))
> >
> >  def fmtremaining(seconds):
> >     if seconds < 60:
> > diff -r 970d8d9b6900 -r d12139042af4 mercurial/ui.py
> > --- a/mercurial/ui.py   Thu Jun 02 19:16:45 2011 +0300
> > +++ b/mercurial/ui.py   Thu Jun 02 00:43:34 2011 +0300
> > @@ -473,12 +473,9 @@
> >         '''
> >         i = self.configbool("ui", "interactive", None)
> >         if i is None:
> > -            try:
> > -                return sys.stdin.isatty()
> > -            except AttributeError:
> > -                # some environments replace stdin without implementing isatty
> > -                # usually those are non-interactive
> > -                return False
> > +            # some environments replace stdin without implementing isatty
> > +            # usually those are non-interactive
> > +            return util.isatty(sys.stdin)
> >
> >         return i
> >
> > @@ -514,17 +511,14 @@
> >
> >         i = self.configbool("ui", "formatted", None)
> >         if i is None:
> > -            try:
> > -                return sys.stdout.isatty()
> > -            except AttributeError:
> > -                # some environments replace stdout without implementing isatty
> > -                # usually those are non-interactive
> > -                return False
> > +            # some environments replace stdout without implementing isatty
> > +            # usually those are non-interactive
> > +            return util.isatty(sys.stdout)
> >
> >         return i
> >
> >     def _readline(self, prompt=''):
> > -        if sys.stdin.isatty():
> > +        if util.isatty(sys.stdin):
> >             try:
> >                 # magically add command line editing support, where
> >                 # available
> > diff -r 970d8d9b6900 -r d12139042af4 mercurial/util.py
> > --- a/mercurial/util.py Thu Jun 02 19:16:45 2011 +0300
> > +++ b/mercurial/util.py Thu Jun 02 00:43:34 2011 +0300
> > @@ -1591,3 +1591,9 @@
> >     u = url(u)
> >     u.user = u.passwd = None
> >     return str(u)
> > +
> > +def isatty(fd):
> > +    try:
> > +        return fd.isatty()
> > +    except AttributeError:
> > +        return False
> 
> A thought. If we do this as:
> 
> fn = getattr(fd, 'isatty', None)
> return fn is not None and fn() or False
> 
> we can trivially add a check-code rule to catch these in the future.

It's also possible to disable check-code on single lines with 

# check-code-ignore

-- 
Mathematics is the supreme nostalgia of our time.




More information about the Mercurial-devel mailing list