Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2012-10-05

carton bundle を高速化する

| 21:17 | carton bundle を高速化する - NaN days を含むブックマーク はてなブックマーク - carton bundle を高速化する - NaN days

2013-02-08: Carton 本体に bundle 時にデフォルトで carton.lock を参照するような変更 が入りました。以下の内容は古くなってると思います


carton を使ってるプロジェクトで tarball をリポジトリに同梱している場合、依存モジュールが増えるたびに carton bundle することになるのだけど、モジュールの数が増えてくるとこれがすこぶる遅くなってしまう。なんでかというと (cpanfile や Makefile.PL を元に) 依存関係をチェックしなおしているからで、その結果 tarball 追加するだけのつもりが carton.lock まで更新されてしまった、というような事態にもなったりする。

これらの挙動を自分好みというか気楽なふうにするため、--locked というオプションを実装してみました。

https://github.com/motemen/carton/tree/bundle-locked

carton bundle --locked とすると、(cpanfile ではなく) carton.lock の内容をもとに tarball をダウンロードするようになります。こうすることで

  • carton.lock が更新されない
  • carton.lock に記録されているモジュールは依存関係などのチェックがすんでいるので、単純にダウンロードだけを行える

というメリットがあります。

ちなみに [2012-10-24: 以降の内容は bundle-locked-download ブランチに移動しました] cpanminus を起動するときに (本家にはない) --download というオプションが指定されていて、ふつうのバージョンを使っている場合には無視されるのですが、本家にあった pull-req (https://github.com/miyagawa/cpanminus/pull/118) に1コミット追加して (https://github.com/motemen/cpanminus/tree/download) 最新の master にマージしたもの (https://github.com/motemen/cpanminus) を使うと便利なオプションで、--download を指定すると

  • tarball の展開をしない (もともとの pull-req の内容)
  • すでに同名の tarball が存在している場合、ダウンロードしない

という挙動になり、IO が劇的に減るため、2 回目以降の carton bundle が高速化できます (数秒で完了するようになります)。