[PATCH stable v2] progress: disable progress when the terminal resembles cmd.exe (issue4801)

Simon King simon at simonking.org.uk
Tue Mar 1 16:19:19 EST 2016


> On 1 Mar 2016, at 19:42, Augie Fackler <raf at durin42.com> wrote:
> 
> # HG changeset patch
> # User Augie Fackler <augie at google.com>
> # Date 1456860899 18000
> #      Tue Mar 01 14:34:59 2016 -0500
> # Branch stable
> # Node ID 301d88f9aeeae128fa8a4e15303f4ac64c7afc69
> # Parent  5f95d6a70e9b37bf11487580a5c750d861baa8f5
> # EXP-Topic progress-cmd
> progress: disable progress when the terminal resembles cmd.exe (issue4801)
> 
> It appears that cmd.exe is hopelessly unreliable when it comes to
> handling carriage returns, based on my own web searching. The blessed
> mechanism for performing cursor positioning appears to be
> SetConsoleCursorPosition(), but I don't have easy access to a Windows
> machine, and we need a simple fix for stable anyway.
> 
> Ideally, someone on Windows can write a fix for this and contribute it.
> 
> diff --git a/mercurial/progress.py b/mercurial/progress.py
> --- a/mercurial/progress.py
> +++ b/mercurial/progress.py
> @@ -7,6 +7,7 @@
> 
> from __future__ import absolute_import
> 
> +import os
> import sys
> import threading
> import time
> @@ -18,8 +19,17 @@ def spacejoin(*args):
>     return ' '.join(s for s in args if s)
> 
> def shouldprint(ui):
> -    return not (ui.quiet or ui.plain()) and (
> -        ui._isatty(sys.stderr) or ui.configbool('progress', 'assume-tty'))
> +    if ui.configbool('progress', 'assume-tty'):
> +        return True

At the moment, either ui.quiet or ui.plain() are enough to disable progress. With this change, progress.assume-tty would override them. Was that intentional?

Simon

> +    if os.name == 'nt' and 'TERM' not in os.environ:
> +        # We think this is cmd.exe, which means we're going to skip
> +        # progress. It appears that carriage returns are unreliable
> +        # for cursor positioning in cmd.exe, and that we should
> +        # instead be using SetConsoleCursorPosition() to move the
> +        # cursor for progress writes. See issue4801 for the report
> +        # that revealed this problem.
> +        return False
> +    return not (ui.quiet or ui.plain()) and ui._isatty(sys.stderr)
> 
> def fmtremaining(seconds):
>     """format a number of remaining seconds in human readable way
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list