Change soft-fail to use the config, rather than env
[rbx.git] / tools / rubuildius / matzbot / plugins / git.rb
blob720eb764a35493c0df17734da0e7ecb8bbf2146d
1 module MatzBot::Commands
2   
3   require 'open-uri'
4   require 'rexml/document'
5   
6   GIT_URL = 'http://git.rubini.us/?p=code;a=atom'
8   hup_proc = lambda {
9           trap("HUP", "IGNORE")
10           trap("HUP", hup_proc)
11   }
12   trap("HUP", hup_proc)
14   abrt_proc = lambda {
15           trap("ABRT", "IGNORE")
16           trap("ABRT", abrt_proc)
17   }
18   trap("ABRT", abrt_proc)
19   
20   def update_git
21     data = open(GIT_URL).read
22    
23     doc = REXML::Document.new(data)
24    
25     last_hash = session[:git_last_hash]
26     person = nil
27     top_hash = nil
28     
29     REXML::XPath.each(doc, "//entry") do |entry|
30       title = REXML::XPath.first(entry, "./title")
31       link =  REXML::XPath.first(entry, "./link")
32       name =  REXML::XPath.first(entry, "./author/name")
33       hash = link.attributes['href'].split("=").last
34       
35       top_hash = hash if top_hash.nil?
36       
37       break if hash == last_hash
39       # we need to put the hast already in now, otherwise it might run the build twice.
40       session[:git_last_hash] = top_hash
42       person = name.text
43       build  = IO.popen("~/continuous/bin/rubinius.zsh #{hash}", "r+") { |p| p.read }
44       unless build.empty?
45         say "#{person}: #{hash[0..8]}; #{build}"
46         #build.split("\n").map{|x| say "  * " << x}
47       end
49       break # only run it for the very last commit
50     end
51   end
52   
53   Signal.trap("USR2") do
54     update_git
55   end
56 end