| 1 |
#!/usr/bin/env ruby -KU |
| 2 |
|
| 3 |
ENV["PATH"] = "/usr/local/bin/:/opt/local/bin:#{ENV["PATH"]}" |
| 4 |
ENV["RAILS_ENV"] ||= "production" |
| 5 |
require File.dirname(__FILE__) + "/../config/environment" |
| 6 |
|
| 7 |
action = ARGV[0] |
| 8 |
|
| 9 |
abort("Need create_repos or load_readmes command") unless action |
| 10 |
|
| 11 |
def failure_msg(msg) |
| 12 |
$stderr.puts "\e[1;31m#{msg}\e[0m" |
| 13 |
end |
| 14 |
|
| 15 |
project_count = Project.count |
| 16 |
Project.find(:all).each_with_index do |project, index| |
| 17 |
case action |
| 18 |
when "create_repos" |
| 19 |
next unless project.wiki_repository.blank? |
| 20 |
project.transaction do |
| 21 |
puts "Creating wiki repo for #{project.slug} (#{index+1}/#{project_count})" |
| 22 |
wiki_repo = Repository.new({ |
| 23 |
:name => project.slug + Repository::WIKI_NAME_SUFFIX, |
| 24 |
:kind => Repository::KIND_WIKI, |
| 25 |
:mainline => false, |
| 26 |
:user => project.user, |
| 27 |
}) |
| 28 |
project.wiki_repository = wiki_repo |
| 29 |
wiki_repo.save! |
| 30 |
end |
| 31 |
when "load_readmes" |
| 32 |
wiki_repo = project.wiki_repository |
| 33 |
git_dir = File.join(GitoriousConfig["repository_base_path"], project.mainline_repository.gitdir) |
| 34 |
unless File.exist?(git_dir) |
| 35 |
failure_msg "Skipping #{project.slug}, no mainline repo, wtf? (#{index+1}/#{project_count})" |
| 36 |
next |
| 37 |
end |
| 38 |
tree = `env GIT_DIR=#{git_dir} git ls-tree HEAD` |
| 39 |
if tree =~ /^\d+ (.+)\t(readme(\..*)?)$/i |
| 40 |
begin |
| 41 |
sha = $1 |
| 42 |
readmename = $2 |
| 43 |
puts "Creating Home in #{project.slug} based on #{$2} (#{$1}) (#{index+1}/#{project_count})" |
| 44 |
p = Page.find("Home", wiki_repo.git) |
| 45 |
readmeblob = project.mainline_repository.git.tree / readmename |
| 46 |
p.content = readmeblob.data |
| 47 |
p.user = project.user |
| 48 |
p.save |
| 49 |
rescue => e |
| 50 |
failure_msg "FAIL: #{project.slug} #{e.class.name}: #{e.message}" |
| 51 |
end |
| 52 |
end |
| 53 |
end |
| 54 |
end |