Skip to content

Exception raised when Kernel.system fails to execute a command #146

@rickr

Description

@rickr

I've got an intermittent failure running my tests. When this occurs guard explodes in glorious fashion with the attached stack trace.

This is happening on a Mac Book Pro:
Darwin res-mppi6 15.6.0 Darwin Kernel Version 15.6.0: Mon Jan 9 23:07:29 PST 2017; root:xnu-3248.60.11.2.1~1/RELEASE_X86_64 x86_64

Under the following ruby:
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin15]

This looks like it's due to Kernel.system being able to return true, false, or nil and the runner only checking for nil per the docs. It looks like the exception in run is trying to catch ENOENT but that returns false as well.

You can see this in action here:

[1] pry(main)> Kernel.system('echo $((1 / 1))')
1
=> true
[2] pry(main)> Kernel.system('echo $((1 / 0))')
sh: 1 / 0: division by 0 (error token is "0")
=> false
[3] pry(main)> Kernel.system('cat file_dun_exist')
cat: file_dun_exist: No such file or directory
=> false

Stack trace:

14:01:06 - ERROR - Guard::Minitest failed to achieve its <run_on_modifications>, exception was:
> [#] NoMethodError: undefined method `zero?' for nil:NilClass
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-minitest-2.4.6/lib/guard/minitest/runner.rb:66:in `run'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-minitest-2.4.6/lib/guard/minitest/runner.rb:85:in `run_on_modifications'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-minitest-2.4.6/lib/guard/minitest.rb:37:in `block in run_on_modifications'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-minitest-2.4.6/lib/guard/minitest.rb:51:in `throw_on_failed_tests'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-minitest-2.4.6/lib/guard/minitest.rb:37:in `run_on_modifications'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:83:in `block (2 levels) in _supervise'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/ui/config.rb:62:in `block in with_progname'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/lumberjack-1.0.11/lib/lumberjack/logger.rb:270:in `push_thread_local_value'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/lumberjack-1.0.11/lib/lumberjack/logger.rb:231:in `set_progname'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/ui/config.rb:61:in `with_progname'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:81:in `block in _supervise'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:79:in `catch'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:79:in `_supervise'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:61:in `block (3 levels) in run_on_changes'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:56:in `each'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:56:in `block (2 levels) in run_on_changes'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:121:in `block (2 levels) in _run_group_plugins'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:119:in `each'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:119:in `block in _run_group_plugins'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:118:in `catch'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:118:in `_run_group_plugins'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:54:in `block in run_on_changes'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:53:in `each'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/runner.rb:53:in `run_on_changes'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/internals/queue.rb:24:in `process'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/commander.rb:43:in `start'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/cli/environments/valid.rb:16:in `start_guard'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/cli.rb:122:in `start'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/thor-0.19.4/lib/thor/command.rb:27:in `run'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/thor-0.19.4/lib/thor/invocation.rb:126:in `invoke_command'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/thor-0.19.4/lib/thor.rb:369:in `dispatch'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/thor-0.19.4/lib/thor/base.rb:444:in `start'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/aruba_adapter.rb:32:in `execute'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/lib/guard/aruba_adapter.rb:19:in `execute!'
> [#] /Users/rickr/.rvm/gems/ruby-2.2.5@project/gems/guard-2.14.1/bin/_guard-core:11:in `<main>'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions