ZenPAN つくった

xaicron (2013/02/27)

めんどくさいこと

社内むけモジュールのかんり

CPAN に上がってないモジュールって長いので以下「ノラ」とします。

開発中によくあること

ノラA を使ってるんだけど、ある日朝目覚めると
ノラA が更新されて ノラB に依存しました。
ノラBノラC に依存しています。

開発者のやらないといけないこと

開発者が追加で知らないといけないこと

ノラA の開発者の気持ち

いちいち伝えるの('A`)マンドクセ

Carton で本当はやりたいこと

cpanfile に git の url とか書い (ry

実は local にインストールするだけだったら可能

% cat cpanfile
requires 'git@github.com:tokuhirom/Furl.git';

% carton install
...

cpanfile に git の url とか書い (ry

しかし

-> cpanm とかの改修が必要なのでいろいろ考えるべき

carton bundle で tarball とか (ry

上記のようなやりかただと git から直接入れちゃってるし tarball がない!!

-> mirror 作って出直してこいボケカス

/(^o^)\

というわけで ZenPAN です

適当に作ったのであれげだよ!

ZenPAN がやること

cpanfile への細工

zenapn のなかで動いてるとなんか ZENPAN_MODE っていう環境変数がセットされるのでよしなにする

% cat cpanfile
requires 'MyModule' => do {
    $ENV{ZENPAN_MODE} ? +{
        via    => 'git@github.com/xaicron/MyModule.git',
        author => 'XAICRON', # default DUMMY
    } : '0.01';
};

...

こんなかんじにすると、環境変数なければ以下のように解釈される

requires 'MyModule' => '0.01';

まじきもいね!

インストール

% cpanm git@github.com:xaicron/p5-ZenPAN.git

mirror を作る

  1. とりあえずさっきいったような cpanfile を書く
  2. 次に add コマンド使う
% zenpan add -p tmp

そしたら勝手に tmp に下に mirror ができた!ヤッター!!

DEMO

mirror から carton install

mirror に必要なモジュール全部あるので、
そっから carton install します。
コマンドは以下

% zenpan install -p tmp

これで内部的に carton install してくれて、全部 install できた!

# TODO carton bunlde だけど、
# cp -R tmp/authors local/cache すれば終わりそう

DEMO

おまけ

ruby gem って local に gem ファイルを保存しておいてくれるから、二回目移行のインストールが速い。

cpanm も同じような機能あれば良い気がする!

Question ?

j or →: next

k or ←: prev

h or ↑: list

l or ↓: return

o or ↵: open

? or /: toggle this help