2012-02-15 1 views
0

私はレコをプルダウンし、いくつかの仕様を実行し、すべてが合格すると宝石を作ります。Ruby 1.9.1-p243 - 実行時に更新されるgemspecを使用して宝石を構築する

gemspecファイルには元のリポジトリのチェックアウトが付属していますので、ジェムが構築されるたびに(つまり、タスクの実行時に)バージョンをバンプしたいと思います。 Gem :: Specification.loadは、nilを返すだけなので、gemspecの属性を操作することはできません。私がこれまでにこれを行うために考え出した唯一の方法は、一時的なgemspecを作成し、バージョンラインを私が望むものに置き換え、mvを現在のgemspecに置き換えることです。

ただし、プロセスが終了するまでファイルは更新されません。パスとファイルは名目上は存在しますが、ファイル自体にコンテンツはありません。ただ空白です。 irbでテストすると、セッションを終了した後にgemspecの内容が表示されます。ここで

は、宝石の建物のためのrakeタスクです:

desc "Build new vulnerability tests gem" 
task :build_gem do 
    Process.fork { update_gemspec_version 'foo.gemspec' } 

    gemspec = Gem::Specification.load('foo.gemspec') 
    builder = Gem::Builder.new(gemspec) 
    puts "Building gem from #{gemspec.file_name}" 
    builder.build 
end 

(あなたが見ることができる、私は方法を実行するためのプロセスをフォークしても問題が解決するだろうと思ったが、それはただの宝石とのdidnを構築するために、元のgemspecを使用しました「T rakeタスクが完了するまで、何も更新)

そしてupdate_gemspec_versionヘルパーメソッド:。

def update_gemspec_version(gemspec) 
    temp_file = Tempfile.new "#{gemspec}" 
    time = Time.now 
    minor_rev = 0 
    base = time.year.to_s + '.' + time.month.to_s + '.' + time.day.to_s 

    File.open("#{gemspec}", 'r') do |file| 
    file.each do |line| 
     if line =~ /^\s*s\.version\s=\s'(\d+\.\d+\.\d+\.(\d+))'$/ 
     if $1 >= base + '.' + minor_rev.to_s 
      while minor_rev <= $2.to_i 
      minor_rev += 1 
      end 
      replacement = line.gsub($1, base + '.' + minor_rev.to_s) 
      puts replacement 
      temp_file.puts replacement 
     else 
      replacement = line.gsub($1, base + '.' + minor_rev.to_s) 
      puts replacement 
      temp_file.puts replacement 
     end 
     else 
     temp_file.puts line 
     end 
    end 
    end 
    FileUtils.mv(temp_file.path, File.expand_path("#{gemspec}")) 
    nil 
end 

私はすべてが間違っているこのついて行くだろうか?

答えて

0

Gem :: Specification.loadは、nilを返すだけなので、 のgemspecの属性を操作できません。

最新のRubyGemを使用していますか? Gem :: Specification.loadは、gem specファイルを正常に評価した場合、Gem :: Specificationのインスタンスを返します。おそらくタイプミスですか? https://github.com/rubygems/rubygems/blob/master/lib/rubygems/specification.rb

+0

あなたが知っていることは以前...私はirbでそれをテストしていましたが、それはゼロに戻りましたが、今は間違いなく正しく編集しました。私はそれがヘルパーメソッドで働いているのを見たはずです。とにかく、ありがとう。物事をもっときれいにする必要があります。 –

関連する問題