最近社内でCartonを使う機会が増えてきているのですが、そもそもCarton自体が何やってるかちゃんと把握できてなくてハマったりするので、社内有志でコードリーディング会を開催しています。今回は第一回のときに出てきに作ったメモを公開します。そのままメモを公開しただけなのでかなり雑です。間違ってることも多いと思います。
今回の目的
- carton install周りで何が起こっているかざっと把握する
疑問とか
いろいろわかったこと
carton概要
- cartonはcpanfileとcpanfile.snapshotの取り持ちを行っているだけで、いろいろなもののwrapperになっているだけ
- インストール系はcpanm
- メタ情報の取得系はCPAN::Meta系
- cpanfileのことはModule::CPANfileとか
- snapshotを作る部分が肝だけど、まだ読み込めてない
--deployment, --cached
cachedつけてもfallbackする件
- local/vendor/cacheがmirrorに追加されるけど、fallbackはされる
- cachedとdeploymentが両方してるとfallbackされないかもしれない
- deploymentだとcascade-searchがoffになるため
インストール先の切替
versionの固定をどうやっているか
- snapshotからcpanのindexファイルを作る
- cpanmにそのファイルを--mirror-indexオプションで渡す
- cpanmはそれに従ってインストールする
この時
- --deploymentが付いていると他のmirrorにfallbackされないため、snapshotに書いていないものはインストールできずにエラーが起こる
- deploymentで無ければ、通常のmirrorにfallbackされるので、cpanfileにしか書いてないモジュールもインストールされる、もしくはアップデートされる
その他
- 同じモジュールで複数のversionだったら常に新しい方になりそう
snapshotの作り方
まだ色々わかってない。わかったことだけ。
on test, on develop
- withoutでdevelopとかfeatureとか消せる
- このへんの扱いはModule::CPANfileでグルーピングされたあと、cpanmがいい感じにあつかう?
第二回の話
昨日第二回をやって、その時のテーマはcpanfile.snapshotをどうやって作っていっているかという観点でコードリーディングをしました。またまとめ次第公開しようと思います。