pulumi/tools/mujs/cmd
joeduffy 3a5217d722 Fix truncated output...again
The prior workaround to avoid truncated pending stdout writes, it
turns out, doesn't actually work.  (Piping output leads to more buffering
and asynchrony, and turned up additional problems.)  Digging through some
GitHub issues led me to these "best practices":

    https://nodejs.org/api/process.html#process_process_exit_code

    The reason this is problematic is because writes to process.stdout in
    Node.js are sometimes non-blocking and may occur over multiple ticks of
    the Node.js event loop. Calling process.exit(), however, forces the
    process to exit before those additional writes to stdout can be performed.

    Rather than calling process.exit() directly, the code should set the
    process.exitCode and allow the process to exit naturally by avoiding
    scheduling any additional work for the event loop.

This change adopts this part of the best practices, by simply setting
exitCode upon normal termination and letting the event loop quiesce.

Note that I am still not obeying the other part of the guidance:

    If it is necessary to terminate the Node.js process due to an error
    condition, throwing an uncaught error and allowing the process to
    terminate accordingly is safer than calling process.exit().

Somewhat confusingly, writes to process.stderr do not suffer from these
same problems, because writes to stderr are synchronous.  We prefer to
tear down the process gracefully, without an unhandled exception, and
we are okay losing some stdout writes as a result, given that all error-
related ones will have gone to stderr.
2017-01-17 14:54:15 -08:00
..
index.ts Fix truncated output...again 2017-01-17 14:54:15 -08:00