Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ローカルファイルのタイムスタンプをコミット時刻にして SVN にコミットするスクリプト。文字コードとユーザー名は適当に修正してください。
#!ruby
# coding: Windows-31J
#
# svn_committer.rb
#
username = 'hoge'
list = `svn list -R`.lines.map {|line| line.strip.chomp('/') }
changesets = {}
Dir.glob("**/{.?,[^.]}*", File::FNM_DOTMATCH).each {|path|
next if %r{\.svn(/.+)?$} =~ path
next if list.include?(path)
next if File.directory?(path) && Dir.entries(path).size > 2
time = File.mtime(path)
if changesets.key?(time)
changesets[time] << path
else
changesets[time] = [path]
end
}
changesets.keys.sort.each {|time|
puts time.strftime('%F %T %:z')
changesets[time].each {|path|
command = %{svn add "#{path}" --parents -N}
puts command
system command
}
svn_date = time.getutc.strftime('%FT%T.%6NZ')
command = %{svn commit -m "#{svn_date}" --username "#{username}"}
puts command
system command
exit 1 unless $?.success?
revision = `svn update`.lines.last.scan(/\d+/).first.to_i
command = "svn propset --revprop -r #{revision} svn:date #{svn_date}"
puts command
system command
exit 1 unless $?.success?
}
@glad2121
Copy link
Author

glad2121 commented Aug 31, 2015

お客様先で SVN を導入したんだけど、既存ファイルのタイムスタンプを保持したいという要望が多かったので、ローカルファイルのタイムスタンプをコミット日時にするスクリプトを書いてみた。
実行前に、リポジトリの pre-revprop-change を変更して、リビジョンプロパティの変更を許可する必要があります。
あと、TortoiseSVN の「ファイルの更新日時を『最終コミット日時』に設定する」にチェックを入れておくと、チェックアウトしたときにファイルのタイムスタンプがコミット日時になります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment