はちゅにっき

こっちのブログはまったり更新

rake を使って CodeRepos から Checkout する

MENTA や NanoA といった最近話題の WAF や、HTTP::Engine といった CodeRepos で開発が進められている最近話題のモジュール群は、ソース読むだけでも良い勉強になるので積極的に Checkout したり、Update して、なるべくソースを追いかけまわるよう、頑張っています。

が、毎回毎回

$ svn co http://svn.coderepos.org/share/lang/perl/
....
$ svn up

とかやるのが、とってもめんどくさくなってきたので、Rakefile を作って

$ rake co@HTTP-Engine  # svn checkout
$ rake HTTP-Engine  # svn update

とかすれば Checkout したり Update したりできるようにしました。
作った Rakefile はこんなの (↓)。

# rake で引数を (簡単に) 扱う
#  http://subtech.g.hatena.ne.jp/cho45/20080108/1199723301
# ありがとうございまーす。
def args (hash)
  name = hash.keys.first
  args = hash[name]
  task name, *args
end

Rake.application.top_level_tasks.replace(ARGV.map {|a|
    name, vals = *a.split(/@/, 2)
      vals ? "#{name}[#{vals}]" : a
})


# Directory 一覧取得
dirs = Dir.entries('./').reject! do |d|
  !FileTest.directory?(d) || /^\.+/ =~ d
end


# default  なぜかできない!
#task :default => :up

# update
desc "all update"
task :up => dirs

dirs.each do |d|
  desc "svn up #{d}"
  task d do |t|
    sh "svn up #{d}"
  end
end

# check out
desc "check out"
args :co => [:repos]
task :co do |t, a|
  sh "svn co http://svn.coderepos.org/share/lang/perl/#{a.repos}/trunk #{a.repos}" unless a.repos.nil?
end

で、こんな感じの場所 (↓) に配置すれば OK。

$ pwd
/home/my/perl/CodeRepos
$ ls
CGI-ExceptionManager/  HTTP-Engine/  HTTP-Router/  MENTA/  NanoA/  Rakefile

わーい。って、実は Shell Script で十分なんですけど。
まぁ、Rakefile の書き方のお勉強ということで。