at posts/single.html

tDiary の contrib パッケージ用の Rakefile 書いた

tDiary-contrib を CoreRepos に移管中の hsbt さんTwitterでつぶやいてたので、 Rakefile を使ってスクリプトを書いた。 やってることはシンプルで、 CodeRepos のリポジトリから最新版を取得して、 tar.gz でアーカイブするだけ。 シェルでも2行で書けるだろうけど、 Rakefile を使う利点もある。

  • contrib が更新されたときだけ、パッケージ (tdiary-contrib.tar.gz) を再生成する

…あれ?これだけ?? う、うーん。

  • Rakefile の使い方をちょっと覚えた
  • 将来的にタスクを増やしたいときに管理が楽

Rakefile の中身はこうなってる。

package_name = 'tdiary-contrib.tar.gz'
excludes = [".svn", "Rakefile", package_name]

desc 'Update files from Subversion Repository'
task :update do |t|
  sh "svn update"
end

desc 'Packaged tDiary-contrib files'
file package_name => FileList["./**/*"] do |t|
  sh "tar zcf #{package_name} . " + excludes.map{|f| "--exclude #{f}"}.join(' ')
end

以下、備忘録を兼ねてポイントだけ。

  • tar の --exclude オプションを使って、 .svn ディレクトリと Rakefile と自分自身 (tdiary-contrib.tar.gz) をアーカイブ対象から除外している
  • FileList を使えばワイルドカードを使って依存関係のファイルを指定できる
  • FileList で ** と書くと、ディレクトリを再帰的にたどってくれる (Makefile にも同じ機能あるのかな?)
  • FileList で **/* と書くとタスクが無限ループになってエラーになるので、 ./**/* と書いている

参考にしたサイト

関連する日記