Hatena::Groupperl

local $PERL_MEMO;

November 07, 2013

[][]minil release時にターゲット以外のバージョンを書き換えられないようにする方法

minil.tomlを修正しようという話です。

問題

上のリポジトリのbenchフォルダみたいに、以前のバージョンと性能比較するために古いバージョンのモジュールをリポジトリに含めてるみたいな場合があります。古いモジュールには$VERSIONが振ってあって、当然これは未来永劫変更するつもりのないものです。

ところで、MinillaのCLIであるminilにはminil releaseコマンドがあります。これは

  • Change のリリース時間の自動挿入
  • 修正のコミットとバージョンタグ付け
  • git push origin master

を勝手にやってくれる大変ありがたいコマンドなのですが、ソースファイル内のバージョンの書き換えを .pm ファイルや .t ファイルを探して勝手にやってくれるという機能もあって、それが今回のケースでは余計なお世話をしてくれます。つまり、古いバージョンのpmファイルも勝手に書き換えちゃうんですね。

対策

問題はリリース対象であるlibフォルダ以外のpmファイルを探しちゃうところにあります。Minillaは「設定より規約」ということで、gitリポジトリの内容が、

lib/以下にPure Perl でモジュールが書かれている

実行ファイルはなんであれ、script/ディレクトリ以下にある

モジュールは Git でメンテナンスされており、git ls-files は、リリースするものにマッチする

モジュールは、cpanfileに予め必要なものの静的なリストがある

モジュールには、Changes がある

Minilla - CPAN モジュールオーサリングツール - perldoc.jp

上記のようなルールに基づいて構成されていることを期待しています。今回のような規約外のことをやろうとするときはminil.tomlという設定ファイルをプロジェクトのルートフォルダに作ってやると良いらしいです。

name = "Uc-Model-Twitter"

[FileGatherer]
exclude_match = ['^bench/.*']

FileGatherer.exclude_match にMinillaのperlファイル収集から除外したいファイルの正規表現を書くと、Minilla::Filegathererに設定がわたっていい感じにしてくれます。

おまけのminil.tomlの話

name はプロジェクトの名前とモジュール名が一致しない時に使います。今回の場合だと p5-uc-model-twitterというフォルダ名でUc::Model::Twitterを開発してます。

思い出したので書いておきますが、TOMLファイルは設定の名前と設定値の間の = の両端に空白がないとシンタックスエラーになります。MinillaのPODに空白のないサンプルがあってちょっとハマった。

[][]Encode::Entity::NCR v0.0.2 release

3年半ぶりの更新。といっても機能的な追加はなく別のモジュールの更新のついでにドキュメントの修正とMinillizeしました。

$ cpanm https://github.com/UCormorant/p5-encode-entity-ncr/archive/0.0.2.tar.gz 

でインストールできます。cpanm についてはググしてください。

see also

ゲスト



トラックバック - http://perl.g.hatena.ne.jp/Cormorant/20131107