#!/usr/bin/ruby require 'rubygems' require 'yaml' require 'ostruct' require 'socket' HOME = ENV['HOME'] config = YAML.load(open(__FILE__+'.yml')) profile = config['default'].dup config.each do |keyword,overrides| next unless ARGV.include? keyword.to_s overrides.each do |key, value| if profile[key].respond_to? :push profile[key].push(value) else profile[key] = value end end end PROFILE = OpenStruct.new(profile) COMMIT = ARGV.find {|arg| arg =~ /http:\/\/github.com\/rails\/rails\/commit\//} log=config.find_all {|k,v| ARGV.include? k.to_s}.map {|k,v| k}.join('-') LOG = "#{HOME}/logs/makedepot#{log}.log" OUTPUT = (PROFILE.output.empty? ? '' : "-" + PROFILE.output.sort.join('-')) WORK = 'work' + OUTPUT.gsub('.','') system "mkdir -p #{File.join(PROFILE.source, WORK)}" BRANCH = PROFILE.branch DESTDIR = PROFILE.destdir SCRIPT = File.join(File.expand_path(File.dirname(__FILE__)), PROFILE.script) URL="http://intertwingly.net/projects/#{DESTDIR}/checkdepot#{OUTPUT}.html" ENV['USER'] ||= HOME.split(File::Separator).last # update Rails updated = Dir.chdir File.join(HOME,'git','rails') do system 'git checkout -q origin/master' system "git checkout #{BRANCH}" system "git checkout #{COMMIT.split('/').last}" if COMMIT before = `git log -1 --pretty=format:%H` system 'git pull origin' `git log -1 --pretty=format:%H` != before end # If unchanged, select next or exit now if !updated Process.exit if ARGV.empty? if ARGV.delete('next') and ARGV.empty? require 'nokogiri' dashboard=`ruby /var/www/awdwr.cgi static=1`.sub(/.*?0 stale = rows.min {|a,b| a.at('td:last').text <=> b.at('td:last').text} stale = stale.search('td').to_a[0..2] exec "#{$0} #{stale.map {|td| td.text.gsub(/\D/,'')}.join(' ')}" end end end # update libs libs = %w(gorp arel rack) libs.each do |lib| Dir.chdir(File.join(HOME,'git',lib)) { system 'git pull' } end ENV['RUBYLIB'] = libs.map {|lib| File.join(HOME,'git',lib,'lib')}. join(File::PATH_SEPARATOR) # run awdwr tests Dir.chdir PROFILE.source if PROFILE.source.include? 'svn' system 'svn up' else system 'git checkout -q master' system 'git pull origin' end # select arguments to pass through args = ARGV.grep(/^(\d+(\.\d+)?-\d+(\.\d+)?|\d+\.\d+?|save|restore)$/) args << "--work=#{WORK}" cmd = "bash #{SCRIPT} #{args.join(' ')} > #{LOG} 2>&1" puts cmd system cmd Dir.chdir File.join(HOME,'git','rails') do system 'git checkout master' unless BRANCH=='master' end # annotate system "ruby #{File.join(HOME,'bin','annotate.rb')} #{WORK}/checkdepot.html"