Skip to content
Snippets Groups Projects
Commit c4a3d3c6 authored by Boris Feld's avatar Boris Feld
Browse files

logtoprocess: connect all fds to /dev/null to avoid bad interaction with pager

We detected that pager is waiting for log-to-process script to finish, which
is annoying when adding a script on commandfinish that does an HTTP push.

There seems to be no workaround on the script side and it will make the
behavior on Linux/MacOS closer to the Windows behavior.

The drawback is that it makes the related tests more flaky as log-to-process
outputs are now really asynchronous.

If it's considered a BC change, another option would be to add a config option
for this new behavior. I personally think that the different behavior between
Windows and Linux is confusing and that it's a bug I would be fine with a new
config option.

Differential Revision: https://phab.mercurial-scm.org/D4816
parent dfca8359
No related branches found
No related tags found
No related merge requests found
......@@ -83,7 +83,11 @@
else:
newsession = {'start_new_session': True}
try:
# connect stdin to devnull to make sure the subprocess can't
# muck up that stream for mercurial.
# connect std* to devnull to make sure the subprocess can't
# muck up these stream for mercurial.
# Connect all the streams to be more close to Windows behavior
# and pager will wait for scripts to end if we don't do that
nullrfd = open(os.devnull, 'r')
nullwfd = open(os.devnull, 'w')
subprocess.Popen(
procutil.tonativestr(script),
......@@ -88,6 +92,7 @@
subprocess.Popen(
procutil.tonativestr(script),
shell=True, stdin=open(os.devnull, 'r'),
shell=True, stdin=nullrfd,
stdout=nullwfd, stderr=nullwfd,
env=procutil.tonativeenv(env),
close_fds=True, **newsession)
finally:
......
......@@ -121,4 +121,4 @@
$ touch $TESTTMP/wait-for-touched
$ sleep 0.2
$ test -f $TESTTMP/touched && echo "SUCCESS Pager is not waiting on ltp" || echo "FAIL Pager is waiting on ltp"
FAIL Pager is waiting on ltp
SUCCESS Pager is not waiting on ltp
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment