CPANにおける依存性の監視


あなたが私のような何かであるならば、あなたは怠惰な賭け者で、代わりに他の人々が書いた図書館に頼る代わりに少しのコードとして書くのを好みます.これにはいくつかの利点があります.それはあなたのためのより少ない仕事です、コードはすでにテストされましたそして、デバッグされて、他の誰かはあなたのためにそれを維持します.欠点は、それらの他の人々が偶然または目的のいずれか、物事を変更する可能性がありますし、コードを破ることです.ですから、他の人々のライブラリを使うつもりなら、実際に使っているライブラリを知るのは良い考えです.
簡単に把握するには、右?ちょうどあなたが使用している覚えて!
ああそれだけでは簡単です.あなたが参照してください、あなたが使用しているコードがあなたと同じくらい怠惰であるすべてのそれらの他の人々、そして、彼らはすべてサードパーティのライブラリを使用しています.としてlearnèd sage 一度書きました.

Bigger fleas have littler fleas upon their backs to bite 'em,
And little fleas have lesser fleas, and so on, ad infinitum.


何年も前に書きましたa script 1 この関数は、CPAN . それらの木は驚くほど速く驚くほど大きく成長する.私のうちの1つに、それは1つの直接的な依存、8秒レベル依存症、第3のレベルでもう13を持ちます、そして、それは壮大な合計41のために続きます2 依存性.
Params::Validate::Dependencies::all_or_none_of (dist: D/DC/DCANTRELL/Params-Validate-Dependencies-all_or_none_of-1.01.tar.gz)
  Params::Validate::Dependencies (dist: D/DC/DCANTRELL/Params-Validate-Dependencies-1.40.tar.gz)
    Clone (dist: A/AT/ATOOMIC/Clone-0.45.tar.gz)
      B::COW (dist: A/AT/ATOOMIC/B-COW-0.004.tar.gz)
    Data::Domain (dist: D/DA/DAMI/Data-Domain-1.07.tar.gz)
      Date::Calc (dist: S/ST/STBEY/Date-Calc-6.4.tar.gz)
        Bit::Vector (dist: S/ST/STBEY/Bit-Vector-7.4.tar.gz)
          Carp::Clan (dist: E/ET/ETHER/Carp-Clan-6.08.tar.gz)
      List::MoreUtils (dist: R/RE/REHSACK/List-MoreUtils-0.428.tar.gz)
        Exporter::Tiny (dist: T/TO/TOBYINK/Exporter-Tiny-1.002002.tar.gz)
        List::MoreUtils::XS (dist: R/RE/REHSACK/List-MoreUtils-XS-0.428.tar.gz)
        Test::LeakTrace (dist: L/LE/LEEJO/Test-LeakTrace-0.16.tar.gz)
      Scalar::Does (dist: T/TO/TOBYINK/Scalar-Does-0.203.tar.gz)
        Test::NoWarnings (dist: A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz)
        Test::Requires (dist: T/TO/TOKUHIROM/Test-Requires-0.11.tar.gz)
        Type::Tiny (dist: T/TO/TOBYINK/Type-Tiny-1.010006.tar.gz)
        URI (dist: O/OA/OALDERS/URI-1.76.tar.gz)
          Test::Needs (dist: H/HA/HAARG/Test-Needs-0.002006.tar.gz)
... and so on
しかし、依存関係ツリーに何が入っているのかを知ることよりも重要なことは、その木が変化したときに知ることです.さて、私は最終的に行ってしまったcreated a tool for that , 10年以上の私のto - doリストにそれをした後に(私は非常に怠惰であることを上で言及しましたか?).
年に少しのデータベースを維持します~/.cpandeps-diff モジュールの依存関係が何であるか、そして、どんな引数なしででもそれを走らせるたびに、それはCPANの上で何であるかについてわかっている依存関係を比較しますcrontab そして、あなたはどんな変化ででも毎日のメールを得ます.
レポートを入手したいモジュールについて説明します.
$ cpandeps-diff add CPAN::FindDependencies
$ cpandeps-diff add Sub::WrapPackages
$ cpandeps-diff add Number::Phone
それがCPANに離れて行くたびに、すべての依存関係が何であるかを見つけて、そのディレクトリのファイルにそれらを保存してください.また、CPANミラーへのトラフィックを最小限にするために使用されるキャッシュディレクトリにも気付きます.
あなたはそれが知っているモジュールを一覧表示することができますし、もはや興味がないことを削除します.
$ cpandeps-diff list
CPAN::FindDependencies
Number::Phone
Sub::WrapPackages

$ cpandeps-diff rm Sub::WrapPackages
個々のモジュールでレポートを得ることができます.
$ cpandeps-diff report Number::Phone
Differences found in dependencies for Number::Phone:
+---+-----------------------------------------------+-----------------------------------------------+
|  3|E/ET/ETHER/Class-Method-Modifiers-2.13.tar.gz  |E/ET/ETHER/Class-Method-Modifiers-2.13.tar.gz  |
|  4|E/ET/ETHER/File-ShareDir-Install-0.13.tar.gz   |E/ET/ETHER/File-ShareDir-Install-0.13.tar.gz   |
|  5|E/ET/ETHER/Try-Tiny-0.30.tar.gz                |E/ET/ETHER/Try-Tiny-0.30.tar.gz                |
*  6|E/EX/EXODIST/Test-Exception-0.42.tar.gz        |E/EX/EXODIST/Test-Exception-0.43.tar.gz        *
|  7|H/HA/HAARG/Moo-2.004000.tar.gz                 |H/HA/HAARG/Moo-2.004000.tar.gz                 |
|  8|H/HA/HAARG/Role-Tiny-2.001004.tar.gz           |H/HA/HAARG/Role-Tiny-2.001004.tar.gz           |
...
あなたはそのレポートでは、新しいバージョンのTest-Exception がリリースされているので、まだそれに依存するコードが動作することを確認する必要があります.それが私のコードを壊したとわかるならば、それはいらいらします、しかし、ユーザーがバグを報告し始める前に、私は問題についてわかりました.
私も作成a website , 元々は、同じコードに基づいていて、すべての依存関係のテスト結果を示していて、それはビットが腐ってしまい、もはや使用できなくなるまでオーバーロードされます.残念です.畝
または、もしあなたが本当に古いバージョンのPerlを使っているなら、インタプリタで配布されたライブラリのアップグレードされたバージョンを必要とするなら、それを2倍以上にすることができます.畝