summaryrefslogtreecommitdiffstats
path: root/script/create_wikis
blob: b0048f7dad5ea783f8061e636a3fe103b5098103 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/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