[ANN] Tork 19.5.0 - test with fork

Manuals: http://sunaku.github.io/tork
Sources: https://github.com/sunaku/tork

Tork runs your tests as they change, in parallel:

  1. Absorbs test execution overhead into a master process.

  2. Forks to inherit overhead and run test files in parallel.

  3. Avoids running unchanged tests inside changed test files.

## Version 19.5.0 (2013-11-30)

This release adds a tork-runner(1) program for non-interactive test execution,
makes connections to tork subprocesses self-healing, eliminates "address
already in use" errors, and fixes bugs in tork-herald(1) and tork-notify(1).

### Minor:

  * Add tork-runner(1) to run tests once, non-interactively, and then exit.

    You can use tork-runner(1) to run your test suite in one shot and then
    exit with a nonzero status if tests failed, similar to `rake test`.

  * Add Tork::Bridge to make connections to tork subprocesses self-healing.

    When a tork subprocess terminates, its parent process now replaces it
    with a fresh instance. Thus the tork process tree is now self-healing.

  * Server: become a remote control to existing instance on socket fail.

    If an another instance of this tork program is already running, then
    become a remote to it rather than failing on binding its socket file.

    This lets you run the same tork program more than once in the same working
    directory; latter runs will become remote controls for the first instance!

    This also lets you run an instance of tork(1) for interactive usage and
    then run tork-runner(1) in another terminal in the same working directory
    to re-use the former's resources to run your test suite non-interactively.

  * tork(1): show help message to clients upon connecting.

  * tork(1): tell user to input 'h' key for help message.

### Patch:

  * tork-notify(1): must pass mutable local variables into Thread.new.

    The `icon` local variable would be overwritten (to nil sometimes)
    outside of the thread and cause the thread body to silently fail.

    See http://stackoverflow.com/q/16745840 for details.

  * Socket files were always deleted: even if not ours.

    If a tork instance was already running and a new tork instance was
    started up in the same directory, then the latter would always delete
    the common socket files (currently belonging to the former) upon exit.

  * Fail earlier on socket bind: avoid wasted overhead.

    Before this patch, tork-master(1) would first pay the price of absorbing
    the test execution overhead before trying to bind its socket. In case
    of socket bind failure, the process would exit and the overhead wasted.

  * Server: don't call method for empty command array.

    This error would occur when pressing ENTER in tork-remote tork-driver:

        tork-driver: #<ArgumentError: no method name given>
        tork-driver: /home/skurapati/lab/tork/lib/tork/server.rb:74:in `recv'
        tork-driver: /home/skurapati/lab/tork/lib/tork/driver.rb:64:in `recv'
        tork-driver: /home/skurapati/lab/tork/lib/tork/server.rb:46:in
`block (2 levels) in loop'
        tork-driver: /home/skurapati/lab/tork/lib/tork/server.rb:37:in `each'
        tork-driver: /home/skurapati/lab/tork/lib/tork/server.rb:37:in
`block in loop'
        tork-driver: /home/skurapati/lab/tork/lib/tork/server.rb:35:in `catch'
        tork-driver: /home/skurapati/lab/tork/lib/tork/server.rb:35:in `loop'
        tork-driver: /home/skurapati/lab/tork/lib/tork/driver.rb:21:in `loop'
        tork-driver: /home/skurapati/lab/tork/bin/tork-driver:173:in
`<top (required)>'
        tork-driver:
/home/skurapati/.rvm/gems/ruby-1.9.3-p448/bin/tork-driver:23:in `load'
        tork-driver:
/home/skurapati/.rvm/gems/ruby-1.9.3-p448/bin/tork-driver:23:in
`<main>'

  * tork-herald(1): listen 2.2.0 gem is non-blocking and gives absolute paths.

    * Calling #start no longer blocks the caller.

    * The `:relative_paths` option no longer works:
      https://github.com/guard/listen/issues/170

  * tork-herald(1): downgrade to listen 1.x gem to maintain Ruby 1.8 support.

### Other:

  * GH-56: specify license in gemspec for rubygems.org.

  * Document sh(1) word splitting in manual pages of all tork servers.

  * README: use `ps uf` to visualize process hierarchy.