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.
