Skip to content

Instantly share code, notes, and snippets.

@glad2121
Created August 31, 2015 15:35
Show Gist options
  • Save glad2121/f11d42b0a7a5735bead9 to your computer and use it in GitHub Desktop.
Save glad2121/f11d42b0a7a5735bead9 to your computer and use it in GitHub Desktop.
ローカルファイルのタイムスタンプをコミット時刻にして 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

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

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