Re: [PATCH v3 1/5] git-p4: rewrite prompt to be Windows compatible

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Ben Keene via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes:

> From: Ben Keene <seraphire@xxxxxxxxx>
>
> The existing function prompt(prompt_text) does not work correctly when
> run on Windows 10 bash terminal when launched from the sourcetree
> GUI application. The stdout is not flushed properly so the prompt text
> is not displayed to the user until the next flush of stdout, which is
> quite confusing.

Is that the bug in raw_input(prompt_text) used in the source, or is
that the bug in your environment (whatever "the sourcetree GUI
application" is)?  I cannot quite tell if this is butchering code
that is perfectly working well for other people just to cope with a
broken invoker that is what really needs fixing, or if it is working
around a bug in raw_input().  If the former, the change is not what
we want, and if the latter, the change should go to Python upstream,
so either way, I am not sure if we want this patch without further
information.

Anybody on a similar platform have opinion on this?  I am OK as long
as this change does *not* break the program in an environment that
it is working fine, but that is not even clear.

> Change this method by:
> * Adding flush to stderr, stdout, and stdin
> * Use readline from sys.stdin instead of raw_input.
>
> The existing strip().lower() are retained.
>
> Signed-off-by: Ben Keene <seraphire@xxxxxxxxx>
> ---
>  git-p4.py | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/git-p4.py b/git-p4.py
> index 40d9e7c594..7d8a5ee788 100755
> --- a/git-p4.py
> +++ b/git-p4.py
> @@ -175,7 +175,11 @@ def prompt(prompt_text):
>      """
>      choices = set(m.group(1) for m in re.finditer(r"\[(.)\]", prompt_text))
>      while True:
> -        response = raw_input(prompt_text).strip().lower()
> +        sys.stderr.flush()
> +        sys.stdout.write(prompt_text)
> +        sys.stdout.flush()

raw_input() is getting replace with input() in another series to
bring us to Python3 compatible world, but because you are getting
rid of its use, as long as the resulting code works with both
Python2 and Python3, we are happy ;-)

> +        sys.stdin.flush()

What does it even mean to flush the input stream here?  At least in
C, it is meaningless and causes an undefined behaviour.

> +        response=sys.stdin.readline().strip().lower()
>          if not response:
>              continue
>          response = response[0]

Thanks.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux