'watchr path/to/watchr.rb'

The watchr file isn't exactly brilliant, and it sucks that we have 20 of them 
scattered into all of the repos, but it's better than not having it.

On Jul 13, 2011, at 8:18 AM, Jeff McCune wrote:

> How do you run watchr on the command line? I was running into this
> issue in a separate project and I'd love to fix it there as well.
> 
> --
> Jeff McCune - (+1-503-208-4484)
> 
> On Jul 13, 2011, at 12:46 AM, Luke Kanies <[email protected]> wrote:
> 
>> Signed-off-by: Luke Kanies <[email protected]>
>> ---
>> Local-branch: tickets/master/2157-external_fact_support
>> spec/spec.opts |    2 -
>> spec/watchr.rb |  125 
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 125 insertions(+), 2 deletions(-)
>> create mode 100755 spec/watchr.rb
>> 
>> diff --git a/spec/spec.opts b/spec/spec.opts
>> index 695852c..0a5f4db 100644
>> --- a/spec/spec.opts
>> +++ b/spec/spec.opts
>> @@ -1,5 +1,3 @@
>> --format
>> s
>> --colour
>> ---loadby
>> -mtime
>> diff --git a/spec/watchr.rb b/spec/watchr.rb
>> new file mode 100755
>> index 0000000..a53b464
>> --- /dev/null
>> +++ b/spec/watchr.rb
>> @@ -0,0 +1,125 @@
>> +ENV["WATCHR"] = "1"
>> +ENV['AUTOTEST'] = 'true'
>> +
>> +def run_comp(cmd)
>> +  puts cmd
>> +  results = []
>> +  old_sync = $stdout.sync
>> +  $stdout.sync = true
>> +  line = []
>> +  begin
>> +    open("| #{cmd}", "r") do |f|
>> +      until f.eof? do
>> +        c = f.getc
>> +        putc c
>> +        line << c
>> +        if c == ?\n
>> +          results << if RUBY_VERSION >= "1.9" then
>> +              line.join
>> +            else
>> +              line.pack "c*"
>> +            end
>> +          line.clear
>> +        end
>> +      end
>> +    end
>> +  ensure
>> +    $stdout.sync = old_sync
>> +  end
>> +  results.join
>> +end
>> +
>> +def clear
>> +  #system("clear")
>> +end
>> +
>> +def growl(message, status)
>> +  # Strip the color codes
>> +  message.gsub!(/ \[\d+m/, '')
>> +
>> +  growlnotify = `which growlnotify`.chomp
>> +  return if growlnotify.empty?
>> +  title = "Watchr Test Results"
>> +  image = status == :pass ? "autotest/images/pass.png" : 
>> "autotest/images/fail.png"
>> +  options = "-w -n Watchr --image '#{File.expand_path(image)}' -m 
>> '#{message}' '#{title}'"
>> +  system %(#{growlnotify} #{options} &)
>> +end
>> +
>> +def file2specs(file)
>> +  %w{spec/unit spec/integration}.collect { |d|
>> +    file.sub('lib/facter', d).sub('.rb', '_spec.rb')
>> +  }.find_all { |f|
>> +    FileTest.exist?(f)
>> +  }
>> +end
>> +
>> +def run_spec(command)
>> +  clear
>> +  result = run_comp(command).split("\n").last
>> +  status = result.include?('0 failures') ? :pass : :fail
>> +  growl result, status
>> +end
>> +
>> +def run_spec_files(files)
>> +  files = Array(files)
>> +  return if files.empty?
>> +  opts = File.readlines('spec/spec.opts').collect { |l| l.chomp }.join(" ")
>> +  begin
>> +    run_spec("rspec --tty #{opts} #{files.join(' ')}")
>> +  rescue => detail
>> +    puts detail.backtrace
>> +    warn "Failed to run #{files.join(', ')}: #{detail}"
>> +  end
>> +end
>> +
>> +def run_suite
>> +  files = files("unit") + files("integration")
>> +  opts = File.readlines('spec/spec.opts').collect { |l| l.chomp }.join(" ")
>> +  run_spec("rspec --tty #{opts} #{files.join(' ')}")
>> +end
>> +
>> +def files(dir)
>> +  require 'find'
>> +
>> +  result = []
>> +  Find.find(File.join("spec", dir)) do |path|
>> +    result << path if path =~ /\.rb/
>> +  end
>> +
>> +  result
>> +end
>> +
>> +watch('spec/spec_helper.rb') { run_suite }
>> +watch(%r{^spec/(unit|integration)/.*\.rb$}) { |md| run_spec_files(md[0]) }
>> +watch(%r{^lib/facter/(.*)\.rb$}) { |md|
>> +  run_spec_files(file2specs(md[0]))
>> +}
>> +watch(%r{^spec/lib/spec.*}) { |md| run_suite }
>> +watch(%r{^spec/lib/monkey_patches/.*}) { |md| run_suite }
>> +
>> +# Ctrl-\
>> +Signal.trap 'QUIT' do
>> +  puts " --- Running all tests ---\n\n"
>> +  run_suite
>> +end
>> +
>> +@interrupted = false
>> +
>> +# Ctrl-C
>> +Signal.trap 'INT' do
>> +  if @interrupted
>> +    @wants_to_quit = true
>> +    abort("\n")
>> +  else
>> +    puts "Interrupt a second time to quit; wait for rerun of tests"
>> +    @interrupted = true
>> +    Kernel.sleep 1.5
>> +    # raise Interrupt, nil # let the run loop catch it
>> +    begin
>> +      run_suite
>> +    rescue => detail
>> +      puts detail.backtrace
>> +      puts "Could not run suite: #{detail}"
>> +    end
>> +  end
>> +end
>> --
>> 1.7.3.1
>> 
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Puppet Developers" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/puppet-dev?hl=en.
>> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Puppet Developers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/puppet-dev?hl=en.
> 


-- 
He attacked everything in life with a mix of extraordinary genius and
naive incompetence, and it was often difficult to tell which was
which.      -- Douglas Adams
---------------------------------------------------------------------
Luke Kanies | http://puppetlabs.com | http://about.me/lak
Join us in PDX for PuppetConf: http://bit.ly/puppetconfsig




-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to