Proposed bundle update –std-out

bundle update –std-out という提案をしてみている。いざindirectからレスポンス合ってみたら、さてどうしようかなと思っている。

bundle update –stdout (bundle update dry-run) · Issue #30 · bundler/bundler-features 

前提知識

bundler/bundlerのissueとpull requestが爆発し過ぎて、バグフィックス以外はbundler-featuresに追い出した。イマココ

https://github.com/bundler/bundler-features/issues

bundler v1.4.0.pre.1が2013-09-30に出た。出たらfeature request出そうと思ってたので、ちょっと遅れたけど予定通り。

本題

Gemfile.lockがunder version controlの場合はgit diff見ればわかるんだけど、(そしてtachikomaを使おう!)、Gemfile.lockをgit ignoreしてる場合に、bundle updateをして上書きして初めて依存がわかるのでツライ。

$ bundle outdated はツライ点が2つ合って、

Screen Shot 2013-10-09 at 12.09.41 AM

出力フォーマットがぱっと見よくて目視マンfriendlyだが、使う側としては意味わからなくてツライ。これはcpan-outdated がすごくよくて、$ cpan-outdated |cpanm でうまく入る。よく勉強している。

あと、実はbundle outdatedはやりたいコマンドとちょっと違っていてツライ。「現在依存している」gemで「今より新しいバージョンがリリースされている」gemを探すコマンド。だから、例えば最新バージョン同士がバッティングしていたり、依存gemの増減まで面倒見てくれない(後者は本当にそうだったか自信ない)。つまり実際bundle update すると、別のものが入る。

なので、stdoutに吐くようにしてくれれば、なんでもできるのになーというのが提案意図。もっと言えば、$ bundle update > Gemfile.lock でよい。

ユースケース

$ diff Gemfile.lock <(bundle update --stdout)
4,9c4,5
<     addressable (2.3.5)
<     faraday (0.8.7)
<       multipart-post (~> 1.1)
<     faraday_middleware (0.9.0)
<       faraday (>= 0.7.4, < 0.9)
<     hashie (2.0.5)
---
>     faraday (0.8.8)
>       multipart-post (~> 1.2.0)
11d6
<     multi_json (1.7.7)
13,20c8,9
<     netrc (0.7.7)
<     octokit (1.25.0)
<       addressable (~> 2.2)
<       faraday (~> 0.8)
<       faraday_middleware (~> 0.9)
<       hashie (~> 2.0)
<       multi_json (~> 1.3)
<       netrc (~> 0.7.7)
---
>     octokit (2.1.1)
>       sawyer (~> 0.3.0)
23,24c12,16
<     safe_yaml (0.9.4)
<     tachikoma (3.0.5)
---
>     safe_yaml (0.9.5)
>     sawyer (0.3.0)
>       faraday (~> 0.8, < 0.10)
>       uri_template (~> 0.5.0)
>     tachikoma (3.0.7)
28a21
>     uri_template (0.5.3)

現実の仮実装
bundle updateにオプション生やして、しかも既存処理を上書くのが書けなかったので…
Not bundle update –stdout but bundle-update_stdout update_stdout.
http://rubygems.org/gems/bundler-update_stdout
https://github.com/sanemat/bundler-update_stdout

議論?

bundle update –dry-run が実際updateするものをprintしてくれればいいんじゃない?(indirect)

話したいこと

diff friendlyやcommand friendly, pipe friendlyにしたいんだ! っていう。英語で主張するのムズそう あと他の人不便に思ってないんかなあ。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中