technomancy/leiningen — pull request #1069 by hyPiRion (2013-03-16 23:07:04+00:00)
Title: Simulate killable blocking reads. Fixes #957

This is the fix for #957: A further explanation of the whole thing will come by tomorrow (2013-03-17). Very briefly, it introduces a new dependency for leiningen-core, [`com.hypirion.io`](https://github.com/hyPiRion/com.hypirion.io), which decouples the ugly parts of input- and output handling within Leiningen and ensures that no race conditions occur, while still maintaining same functionality and a fix for #957.

In addition, this new dependency handles the piping of data from processes to stdout, stdin and stderr and makes them more efficient. (Removes thread sleeps etc.)

As it's only tested on one debian linux machine, it would be lovely to check whether this crashes or otherwise breaks on other systems before actually merging it into Leiningen (hence the pull request). Specifically, if people could check that `lein deploy`, `lein run` and `lein repl` works as intended, I would be a very happy man. Please also try different combinations like `lein do run, run, repl` or similar actions.

This will introduce an observed bug related to `deploy`, where the password prompt is broken if `System/in` is rebound (happens when running `run`, `test` and `repl`). However—when this is the case—deploy will send a descriptive error on what the issue is and how to solve it, as well as subtly suggesting that one should properly setup GPG.