Backup 2
「Subversion のバックアップ、その 2。」
フルバックアップ用と差分バックアップ用を一本化。latest があれば差分、なければフルで動作する。運用としては、これを毎日走らせておき、時々 latest を消すように cron を書くことを想定。
--- (svnbackup.rb) #!/usr/local/bin/ruby require 'pathname' # パラメーターが足らなければ終了。 if ARGV.size < 2 puts <<EOS USAGE : ruby svnbackup <repository> <backup directory> EOS exit end # 準備 repository = Pathname.new ARGV[0] base_dir = Pathname.new ARGV[1] mark_file = base_dir + 'latest' latest = 0 latest = mark_file.read.to_i if mark_file.exist? youngest = `svnlook youngest #{repository}`.to_i # バックアップ済みなら終了。 exit if latest == youngest # ダンプ if latest == 0 dump_option = "--revision #{latest}:#{youngest}" else latest += 1 dump_option = "--revision #{latest}:#{youngest} --incremental" end dump_name = base_dir + "dump_#{latest}_#{youngest}.bak" `svnadmin dump #{repository} #{dump_option} > #{dump_name}` # マーキング mark_file.open("w") {|file| file.print youngest }