読者です 読者をやめる 読者になる 読者になる

TracLightning移行用データを出力するスクリプトのメモ

ruby

TracLightning を動かしているサーバーが
f:id:griefworker:20130130200946j:plain
なので、新しいサーバーに移行することになった。

当然、Subversion の履歴や Trac のチケットも移行しないといけない。手作業で trac-admin や svnadmin をたたくなんてやってられないので、RubyTrac のデータをエクスポートするスクリプトを書いてみた。

# coding: utf-8
require "fileutils"

TRAC_HOME = "E:¥TracLight"
TRAC_ADMIN = File.join(TRAC_HOME, "bin", "trac-admin.bat")
TRAC_SRC_DIR = File.join(TRAC_HOME, "projects", "trac")
SVN_SRC_DIR = File.join(TRAC_HOME, "projects", "svn")

EXPORT_HOME = "F:¥TracMigration"
TRAC_DEST_DIR = File.join(EXPORT_HOME, "trac")
SVN_DEST_DIR = File.join(EXPORT_HOME, "svn")

# エクスポート先のディレクトリを作り直す
if Dir.exist?(EXPORT_HOME)
  puts "#{EXPORT_HOME} を削除"
  FileUtils.rmtree(EXPORT_HOME)
end
FileUtils.makedirs(TRAC_DEST_DIR)
FileUtils.makedirs(SVN_DEST_DIR)

# Trac のデータをコピー
Dir.glob(File.join(TRAC_SRC_DIR, "*")).each do |path|
  name = File.basename(path)
  dest_dir = File.join(TRAC_DEST_DIR, name)
  puts "#{path} をコピー"
  system "trac-admin #{path} hotcopy #{dest_dir}"
end

# SVN のダンプを出力
Dir.glob(File.join(SVN_SRC_DIR, "*")).each do |path|
  name = File.basename(path)
  dest_path = File.join(SVN_DEST_DIR, name + ".dat")
  puts "#{path} のダンプを出力"
  system "svnadmin dump #{path} > #{dest_path}"
end