_ [debian] pkg-ruby-extras めも

続々々々々々々・mikutter パッケージングから派生した話題で、DebianでのRuby関連パッケージのことはじめの自分なりのめも。 まずたどりついたのは Teams/Ruby - Debian Wiki で、ライブラリのパッケージングをしたいので pkg-ruby-extras team の Teams/Ruby/Packaging - Debian Wiki のほうに移動する。 Joining the pkg-ruby-extras team では、まず Maintainers of the Debian Ruby Extras packages か IRC で声をかけてほしいとあるので ML ログを 2011/1 までさかのぼったけどそれらしいのがなかった。とりあえず pkg-ruby-extras-maintainersdebian-ruby を subscribe。alioth のアカウントは持っているし、pkg-ruby-extras team の join request に詳しく書くことで代用できるかな(ruby-typed-array の ITP やその他 ruby パッケージの作業をしたいと記載)。承認が出るまで Debian/Ruby teams の Wiki を一通り読んでおく。 承認が出たら作業開始。Obtaining the master repository に従って pkg-ruby-extras レポジトリを取得。あれ、少ないな…と思ったらこれで取れるのは設定ファイルだけで、mr というコマンドでごっそり取ってくるようだ。で、実際やってみると、

mr: illegal section "[DEFAULT]" in untrusted /usr/src/deb/pkg-ruby-extras/.mrconfig line 1
(To trust this file, list it in ~/.mrtrust.)

となってしまった。

Add .mrconfig path to ~/.mrtrust

ref. Known Issues

とあったけど書式がよくわからない。man を見たら、

To configure mr to trust other mrconfig files, list them in ~/.mrtrust. One mrconfig file should be listed per line. Either the full pathname should be listed, or the pathname can start with ~/ to specify a file relative to your home directory.

ref. mr(1)

と書式が書いてあった。

% echo "/usr/src/deb/pkg-ruby-extras/.mrconfig" > ~/.mrtrust

として解決。 Creating a new git repository and pushing an existing package to git.debian.org に従って、これから作業する対象のパッケージを git.debian.org 上で登録する。ローカルマシンに戻り、先程 checkout した pkg-ruby-extras を更新する。作業する対象のパッケージが checkout して出てくるので、その中でパッケージング作業を行う。ただし、

At this point, please do not make any change to the package generated by gem2deb. It is important to track all the changes in git.

ref. Creating a new git repository and pushing an existing package to git.debian.org

とあるように、gem2deb で変換した直後のものを最初に push し、

git tag -d debian/0.7-1 # because the package is not ready yet

ref. Creating a new git repository and pushing an existing package to git.debian.org

とあるように、git import-dsc –pristine-tar で自動的で振られる tag は削除しておく。この状態で push してから、ようやく変更作業を開始する。変更が終わったら、先程削除した tag を改めて振り直し、push する。 あとの注意点といえば、ITP する際の X-Debbugs-CC に pkg-ruby-extras-maintainers を含めておくくらい?

_ [debian] ruby-typed-array test めも

だいたいは gem2deb がよきにはからってくれるけど、test の部分が特に厄介だと思うので ruby-typed-array でやったときのめも。 typed-array には

% ls -n spec/
合計 16
-rw-r--r-- 1 1000 1000  361 12月 29 16:04 spec_helper.rb
-rw-r--r-- 1 1000 1000 9425 12月 29 16:04 typed-array_spec.rb
%

というディレクトリ/ファイルがあり、どうやらこれは RSpec によるテストケースらしい(RSpec の用語では executable examples と言うらしい)。 ためしに rspec コマンドを叩いてみると、

% /usr/bin/ruby1.8 /usr/bin/rspec
.............................................................................................................................................................

Finished in 0.03744 seconds
156 examples, 0 failures
% /usr/bin/ruby1.9.1 /usr/bin/rspec
.............................................................................................................................................................

Finished in 0.02634 seconds
156 examples, 0 failures
%

のようにパスする。これをパッケージ生成の際に実行するようにしてやればいい。gem2deb は debian/ruby-tests.rb という雛形を準備してくれるので、これに記載する。RSpec の場合は、

require 'rspec/autorun'
require 'typed-array_spec.rb'

のように、rspec/autorun と spec/ ディレクトリ内の *_spec.rb を require すれば、パッケージ生成の際に、

  Entering dh_ruby --install
        :
/usr/bin/ruby1.9.1 -I/usr/lib/ruby/vendor_ruby /usr/lib/ruby/vendor_ruby/gem2deb
/test_runner.rb
.................................................................................
.............................................................................

Finished in 0.02921 seconds
156 examples, 0 failures
/usr/bin/ruby1.8 -I/usr/lib/ruby/vendor_ruby /usr/lib/ruby/vendor_ruby/gem2deb/t
est_runner.rb
.................................................................................
.............................................................................

Finished in 0.03664 seconds
156 examples, 0 failures
  Leaving dh_ruby --install

自動的にテストしてくれる。 RSpec 以外にもテストフレームワークはあるし、dh_ruby(1) によれば debian/ruby-tests.rb ではなく debian/ruby-test-files.yaml や debian/ruby-tests.rake を使う方法など、やりかたはいろいろあるみたい。

_ [debian] ruby-rspec-instafail test めも

→ruby-rspec-instafail を git に登録、test がよくわからない。

ref. どれ作業してるか判らなくなる

とのことなのでちょっと見てみた。

% ls -n spec
合計 12
-rwxr-xr-x 1 1000 1000 1422  1月  4 12:19 instafail_spec.rb
drwxr-xr-x 2 1000 1000 4096  1月  4 12:19 rspec_1
drwxr-xr-x 2 1000 1000 4096  1月  4 12:19 rspec_2
%

これも RSpec 形式のようだけど、ちょっと様子が変。

)% /usr/bin/ruby1.9.1 /usr/bin/rspec 
FFF....

Failures:

  1) RSpec::Instafail RSpec 1.x outputs failures at start of output
        :

のように、なにやら RSpec 1.x を対象としたテストに失敗しているらしい。

% head -5 spec/instafail_spec.rb
describe 'RSpec::Instafail' do
  context "RSpec 1.x" do
    before :all do
      @rspec_result = `cd spec/rspec_1 && bundle exec spec a_test.rb --format RSpec::Instafail`
    end
% cat spec/rspec_1/Gemfile     
source 'http://rubygems.org'
gem 'rspec', '1.3.0'
%

Debian では RSpec は既に 2.x 系なので、context “RSpec 1.x” ブロックは削除するパッチを当てて実行しないでいい気がする。さらに言うと、このパッケージには使われることのないだろう RSpec 1.x 用のファイルも含めなくていい気がする。ただ、RSpec 1.x 用のファイルを含めない場合は修正箇所が結構多くなる。