Homebrewの最近のアップデート
12月1日に[2.6.0](2.6.0 — Homebrewがリリースされ、Big Surへのサポートなどが追加されました。
一方で、cask
コマンドがdeprecatedになって
brew cask list
などはbrew list --cask
を使えとWarningを出すようになりました。
(この時点では一応結果は出してくれる。)
そんな中、割と早いタイミングで12月21日に 2.7.0 がリリース。
これにより1つ大きな変更として、上のbrew cask list
は結果を返さずにエラーを返すようになりました。
前の 2.5.0 が9月頃なので割と早い。 (2.3から2.4は10日くらいと瞬足でしたが。)
2.6.0をリリースした際にはそれまで開発されてたものが割と組み込まれないままで リリースされてたので、それらが上手く納まったので早速リリースされたのかな、という感じがします。
2.7.0での違い
で、2.7.0で何が変わったかというと、 ブログ を見るだけだとあまりユーザーが気にすることもないように見えます。
ただ上にも書いたcask
コマンドが完全に使えなくなった、というのは結構大きいところだと思います。
また、ブログにあるところで気にする点としては、
とかで、Formula/Caskのファイルが入っているhomebrew-core/homebrew-caskのローカルレポジトリが
shallow cloneだとbrwe update
で以下みたいなエラーが出るようになります。
$ brew update
Error: homebrew-core is a shallow clone. To `brew update` first run:
git -C "/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow
This restriction has been made on GitHub's request because updating shallow
clones is an extremely expensive operation due to the tree layout and traffic of
Homebrew/homebrew-core. We don't do this for you automatically to avoid
repeatedly performing an expensive unshallow operation in CI systems (which
should instead be fixed to not use shallow clones). Sorry for the inconvenience!
このエラー自体はGitHubのレポジトリ側の設定なので、Homebrewのバージョンが古くても出ます。 (つまりHomebrew 2.7.0とは直接は関係ない)
出たら指示にある通り
$ git -C "/home/linuxbrew/.linuxbrew/Homebrew/Library/Taps/homebrew/homebrew-core" fetch --unshallow
とかを実行すれば良いだけなんですが、いきなり出るのでちょっとだるい。
shallow cloneとかしたつもりはないんですが、これが出たのは見て分かる通りLinux環境で、 具体的にはWindowsのWSL2の環境です。
macOSの環境では出ていません。
Linux環境ではインストールスクリプトが違うので、以前のものだと shallow cloneしていたのかもしれません。
今は治ったのか、以前そういうものだったのか、などちゃんとチェックはしてませんが、 特にLinux環境でLinuxbrewの頃からHomebrewを使ってる人はチェックしておいた方が良いかと思います。
その他はBREW_CLEANUP_PERIODIC_FULL_DAYS
という環境変数が導入され、
これに対して
export BREW_CLEANUP_PERIODIC_FULL_DAYS=10
とかしておくと10日毎以上経ったあとにbrew install
/upgrade
/reinstall
すると
brew cleanup
も同時に実行する、というもの。
デフォルトの値は30
です。
これまでもこのbleanup
を一緒に実行する機能自体はありましたが、
実行までの日数が変更できなかったのが今回から変えられるようになりましたよ、というもの。
この機能自体を無効にする
BREW_CLEANUP_PERIODIC_FULL_DAYS
という変数は以前からあって、
これに1
とか設定しておけば勝手にcleanup
することは無いようになってました。
で、それだけだと思いきや、結構大きな別の変更もあります。
brew list
特にブログで触れられてない部分ですが、
いろいろなdeprecations
がアップデートに含まれています。
上にも書いているcask
が完全に使えなくなった、というのも1つ。
この中で、brew list
というコマンドを標準出力以外に渡すとエラーを出すようになった変更があります。
brew cask list
の代わりにbrew list --cask
を強制される様になったわけですが、
Caskもbrew list
を使うため、
単にbrew list
を使うと何を表示するのか不鮮明な状態になってしまいました。
2.6.0からはbrew list
はFormulaとCask両方を表示する様になっていました。
ただし、ファイルへの書き出しなど、標準出力以外へリダイレクションなどを行うと
以前のbrew list
の同様にFormulaだけを出力するようになっていました。
書き出し方によらずFormulaだけを出力するにはbrew list --formula
とします。
これが警告機関であったわけですが、cask
同様、
2.7.0ではbrew list
をオプションなしで使ってファイルへ書き出そうとすると
エラーを返す様になりました。
$ brew list > brewlist.txt
Error: Calling `brew list` to only list formulae is disabled! Use `brew list --formula` instead.
これが特に影響すると思うのは、Brewfileなどを使って
独自にパッケージを管理している人。
以前までbrew list
を使っていたはずなので、
何らかの変更が必要です。
Homebrew-fileの対応
homebrew-file
もbrew list
を使っていたのでHomebrew 2.7.0でエラーを出すようになっていました。
ので、治しました。
brew-file fails on ‘brew list’ · Issue #103 · rcmdnk/homebrew-file
同じくbrew cask install
とかも出来なくなっているので上に加えてv8.3.1で治してあります。
2.6.0がリリースされる前に、こういった変更が開発版には入っていて、今後入ってきそうだ、ということは気づいてたんですが 1、 2.6.0の時点で変更が入らなかったので やはり影響が大きいので入れないのかな、と思ってました。
が、このリリースの感じからすると、 2.6.0でいきなり入れるのは影響大きすぎるからWarning出して周知して、 次のタイミングで完全に外すようにしよう、といった感じだったのかもしれません。
それもあっての早いタイミングでのリリースか、たまたま他の機能がまとまったから リリースなのかはわかりませんが。
ただ、cask
はちゃんとWarningしてくれてたけど、
brew list
はWarningが入ってなかったので見逃されるのかな、とか思ってたんですが。
標準出力とリダイレクションで結果が違うという状態だったので気持ち悪いな、とは思ってましたが。。。
それ以外にもHomebrew-fileに影響が出てる可能性もあるので GitHubのIssues とかで教えて下さい。
現状でもbrew-wrapを使った場合にbrew install <cask>
するとFormulaかCaskかわからずに
一旦Formula(brew
)として追加されてしまう、という問題がありますが、
いっそBrewfile内で分けなくても良いかな、とも。
ご意見あればなんでもください。