よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

October 25, 2004 [おもひで]

[Ruby] raadepchecker.rb

RAAのDependencyの件で、なひさんとメールでやりとりさせていただいた中で

RAAに登録した自作アプリ・ライブラリが他のライブラリたちに依存している時、他のライブラリたちがバージョンアップされると、RAA的には互換性が保証されない状態になる。その場合は、再度、依存している他のライブラリの最新版と自作アプリ・ライブラリがきちんと動作するか確認した上でRAAのdependenciesをアップデートすべきである

というポリシーがあると伺った。

ちょっと厳しい気もしないでもないが確実性という意味ではやむをえないのかなとも思う。

とはいえ、いくつか登録しているアプリ・ライブラリが依存しているライブラリのアップデート状況をWWWブラウザでチェックするのもメンドウクチャイ。

幸い、RAAはSOAPインタフェイスを持っているので、それを使ってチェッカを作ってみた。名付けて「自作ライブラリ依存先ライブラリアップデートチェッカ」....長い。

require 'soap/wsdlDriver'
  
module RAADepChecker
  RAA_URI   = "http://www.ruby-lang.org/xmlns/soap/interface/RAA/0.0.4/"
  EMPTY     = 0
  UPDATED   = 1
  NOCHANGED = 2
  NOTFOUND  = 3
  
  module_function
  def get_project(prj_id)
    raa = SOAP::WSDLDriverFactory.new(RAA_URI).create_driver
    gem = raa.gem(prj_id)
    gem.project if gem
  end
   
  # [[prj_id, req_version, newest_version], ...]
  def check_dependencies(prj)
    ret = []
    if prj.dependency.size == 0
      ret << [EMPTY, prj.name, nil, nil]
    end
    prj.dependency.each {|dep|
      dep_prj = RAADepChecker.get_project(dep.project)
      if dep_prj and dep_prj.version != dep.version
        ret << [UPDATED, dep.project, dep.version, dep_prj.version]
      elsif dep_prj
        ret << [NOCHANGED, dep.project, dep.version, dep_prj.version]
      else
        ret << [NOTFOUND, dep.project, dep.version, nil]
      end
    }
    ret
  end
end
 
if __FILE__ == $0
  ARGV.each do |prj_id|
    puts "\n-- #{prj_id} ------"
    prj = RAADepChecker.get_project(prj_id)
    if prj
      RAADepChecker.check_dependencies(prj).each do |v|
        case v[0]
        when RAADepChecker::EMPTY
          puts "No dependencies."
        when RAADepChecker::UPDATED
          puts "Required #{v[1]} #{v[2]} : Updated to #{v[3]}." 
        when RAADepChecker::NOCHANGED
          puts "Required #{v[1]} #{v[2]} : Nothing has been changed." 
        else RAADepChecker::NOTFOUND
          puts "Required #{v[1]} #{v[2]} : No entry in RAA."
        end
      end
    else
      puts "No entry in RAA."
    end
  end
end

ruby raadepchecker.rb project1 project2 .... と言う感じで使う。試しに、Ruby-GNOME2, rbbr, ruby-gettext-packageの結果を表示してみる。

$ruby raadepchecker.rb ruby-gnome2 rbbr ruby-gettext
 
-- ruby-gnome2 ------
No dependencies.
  
-- rbbr ------
Required ruby-gnome2 0.9.1 : Updated to 0.10.1.
Required ruby-gettext 0.5.4 : Updated to 0.7.0.
 
-- ruby-gettext ------
Required racc 1.4.4 : Nothing has been changed.

つまり、rbbrはruby-gnome2-0.10.1, ruby-gettext-0.7.0で動作確認してRAAのエントリをアップデートしなきゃならんのう、ということがわかるわけだ。たまに気が向いたら実行してみればいいさぁ。

うーん、ちょっとは便利になったかな。でも、やっぱりメンドクチャイ!

また、余計なものを作ってしまった...。そんなことよりRuby/GnomeCanvas2どうにかしないと...(T_T)。


編集