diff --git a/Documentation/redo.md b/Documentation/redo.md index b98d189..4a4024a 100644 --- a/Documentation/redo.md +++ b/Documentation/redo.md @@ -38,6 +38,11 @@ instead. A .do script can call redo recursively to build its dependencies. +To avoid confusion caused by multiple programs trying to +use the terminal, inside .do scripts, stdin is normally +redirected to /dev/null. The only exception is if the `-j` +option is *not* given and `--no-log` is used. + # OPTIONS diff --git a/builder.py b/builder.py index 5c4bd69..3f5d422 100644 --- a/builder.py +++ b/builder.py @@ -22,9 +22,14 @@ def _try_stat(filename): log_reader_pid = None +def close_stdin(): + f = open('/dev/null') + os.dup2(f.fileno(), 0) + f.close() + + def start_stdin_log_reader(status, details, pretty, color, debug_locks, debug_pids): - if not vars.LOG: return global log_reader_pid r, w = os.pipe() # main pipe to redo-log ar, aw = os.pipe() # ack pipe from redo-log --ack-fd diff --git a/redo-ifchange.py b/redo-ifchange.py index d4d7cb7..c9db239 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -19,7 +19,8 @@ def should_build(t): rv = 202 try: - if vars_init.is_toplevel: + if vars_init.is_toplevel and vars.LOG: + builder.close_stdin() builder.start_stdin_log_reader(status=True, details=True, pretty=True, color=True, debug_locks=False, debug_pids=False) if vars.TARGET and not vars.UNLOCKED: diff --git a/redo.py b/redo.py index 80c0224..4303df2 100755 --- a/redo.py +++ b/redo.py @@ -79,7 +79,10 @@ import vars, state, builder, jwack from logs import warn, err try: - if vars_init.is_toplevel: + j = atoi(opt.jobs or 1) + if vars_init.is_toplevel and (vars.LOG or j > 1): + builder.close_stdin() + if vars_init.is_toplevel and vars.LOG: builder.start_stdin_log_reader(status=opt.status, details=opt.details, pretty=opt.pretty, color=opt.color, debug_locks=opt.debug_locks, debug_pids=opt.debug_pids) @@ -91,7 +94,6 @@ try: % f.nicename()) state.rollback() - j = atoi(opt.jobs or 1) if j < 1 or j > 1000: err('invalid --jobs value: %r\n' % opt.jobs) jwack.setup(j)