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

Subversionのログを一括で修正する

Subversionのログに書いてあるURLが移転とかで変わったけど全部正しいURLに差し替えたい…!とかそういうニッチなことをするの、こんな感じでどうでしょうか。

1.リポジトリをダンプして、一時リポジトリを作ってそこにインポートする

$ svnadmin dump repos/fromrepo > dump.dump
$ svnadmin create repos/workrepo
$ svnadmin load repos/workrepo < dump.dump

2.ログをXMLで出力し、出力されたXMLのコメントをお好みに編集する

$ svn log --xml file:///Users/ebina/work/svn_comment/repos/workrepo/ > logs.xml

3.以下のRubyスクリプトを実行

require 'rexml/document'

svnpath = ARGV[0]
xmlpath = ARGV[1]

if svnpath == nil || xmlpath == nil
  puts "Usage: ruby svn_comment_import.rb [Subversion repositry] [log xml]"
  exit
end

doc = File.open(xmlpath) {|fp| REXML::Document.new fp }
doc.elements['/log'].each do |l|
  if l.class == REXML::Element && l.name == "logentry"
    rev = l.attributes['revision']
    msg = l.elements['msg'].text
    File.open('work.txt', 'w') do |f|
      f.puts msg
    end
    system( "svnadmin setlog --bypass-hooks #{svnpath} -r #{rev} work.txt")
    File.delete('work.txt')
  end
end
$ ruby svn_comment_import.rb /Users/ebina/work/svn_comment/repos/workrepo/ logs.xml

4.正しくログが反映されてるかをsvn logとかで確認して、本ちゃんのリポジトリに持って行く