#!/usr/bin/env ruby -KU ENV["PATH"] = "/usr/local/bin/:/opt/local/bin:#{ENV["PATH"]}" ENV["RAILS_ENV"] ||= "production" require File.dirname(__FILE__) + "/../config/environment" action = ARGV[0] abort("Need create_repos or load_readmes command") unless action def failure_msg(msg) $stderr.puts "\e[1;31m#{msg}\e[0m" end project_count = Project.count Project.find(:all).each_with_index do |project, index| case action when "create_repos" next unless project.wiki_repository.blank? project.transaction do puts "Creating wiki repo for #{project.slug} (#{index+1}/#{project_count})" wiki_repo = Repository.new({ :name => project.slug + Repository::WIKI_NAME_SUFFIX, :kind => Repository::KIND_WIKI, :mainline => false, :user => project.user, }) project.wiki_repository = wiki_repo wiki_repo.save! end when "load_readmes" wiki_repo = project.wiki_repository git_dir = File.join(GitoriousConfig["repository_base_path"], project.mainline_repository.gitdir) unless File.exist?(git_dir) failure_msg "Skipping #{project.slug}, no mainline repo, wtf? (#{index+1}/#{project_count})" next end tree = `env GIT_DIR=#{git_dir} git ls-tree HEAD` if tree =~ /^\d+ (.+)\t(readme(\..*)?)$/i begin sha = $1 readmename = $2 puts "Creating Home in #{project.slug} based on #{$2} (#{$1}) (#{index+1}/#{project_count})" p = Page.find("Home", wiki_repo.git) readmeblob = project.mainline_repository.git.tree / readmename p.content = readmeblob.data p.user = project.user p.save rescue => e failure_msg "FAIL: #{project.slug} #{e.class.name}: #{e.message}" end end end end