#!/usr/local/bin/ruby require 'fileutils' require 'rubygems' require_gem 'postgres-pr' require 'postgres-pr/connection' HOME_DIR = "/root/gforge" CVS_DIR= "/var/cvs/" BASE_OUTPUT_DIR = "/var/www/gforge-projects/" DELAY = 5 puts "Starting at #{Time.new}" Dir.chdir(HOME_DIR) PostgresPR::Connection.new("gforge", "gforge").query("select unix_group_name from groups g, group_plugin gp where g.use_scm = 1 and g.status = 'A' and g.group_id = gp.group_id and gp.plugin_id = 2 order by g.unix_group_name").rows.each {|row| name = row[0] next if ["news", "stats", "sourceforge"].include?(name) #next if name != "actionmailer" begin puts "Starting #{name} at #{Time.new}" output_directory = "#{BASE_OUTPUT_DIR}#{name}/statcvs/" if !File.exists?(output_directory) Dir.mkdir(output_directory) FileUtils.cp("#{HOME_DIR}/index.html", output_directory) end work_dir = "tmp_" + rand().to_s Dir.mkdir(work_dir) Dir.chdir(work_dir) `cvs -d#{CVS_DIR}#{name} -Q co .` FileUtils.rm_rf(%w{CVS CVSROOT}) if !Dir.new(".").entries.grep(/^[^.]/).empty? `cvs -d#{CVS_DIR}#{name} -Q log > log` cmd = "/usr/java/j2sdk1.4.2_06/bin/java -jar /usr/local/statcvs/statcvs.jar -output-dir #{output_directory} log ." `#{cmd}` FileUtils.rm("log", :force=>true) end Dir.chdir(HOME_DIR) FileUtils.rm_rf(work_dir) puts "Ending #{name} at #{Time.new}" sleep DELAY rescue StandardError => e puts "Failing due to #{e.message}" end } puts "Ending at #{Time.new}"