rcmdnk's blog
Last update

The Cask: A Police Procedural Mystery (English Edition)

MacのHomebrewで扱うパッケージを管理するためのhomebrew-file ですが、Caskでインストールしたアプリをチェックして新しいバージョンがあれば インストールするcask_upgradeというサブコマンドがあります。

これがちょっと前からきちんと働いてなかった様なので治しました。

brew file cask_upgrade

cask_upgradeはHomebrew Caskでインストールしたアプリをチェックして 現在入ってるバージョンが最新のCaskで定義されているものより古ければ 新しい物を再インストールするサブコマンドです。

$ brew file cask_upgrade
bettertouchtool was installed by cask, but it may have newer version, might be removed or overwritten by direct installation.
Install it by cask.
Remove older version: /usr/local/Caskroom/bettertouchtool/1.69
Remove older version: /usr/local/Caskroom/bettertouchtool/1.75
...
This is dryrun.
Please use -C to execute commands.

こんな感じで新しい物があるアプリや、古いバージョンのディレクトリが残ってたりすると 探してくれます。 このままだとdry runで最後に上の様なメッセージが出るので、実際に 再インストールや古いディレクトリの削除を行うには、

$ brew file cask_upgrade -C

としてください。

で、このコマンドがちょっと前からちゃんと働いてなかったみたいなんですが、 おそらくこの前あったCaskの仕様変更に関連するところだと思います。

以前はCaskがアップデートされてバージョンが新しくなると、 古いバージョンが入っていても

$ brew cask info bettertouchtool

とかするとNot installedという行が出ていました。

これが、今は古いバージョンだけしかなくてもそのディレクトリとかが表示されたりして Not installedとは出ません。

この辺の変更に合わせ、 cask_upgradeでは現在のバージョンが入ってるかどうかきちんと確認するようにしました。

具体的には$(brew –prefix)/Caskroom/<app name>/ のディレクトリ下にバージョン名のディレクトリがあるので、 現在のバージョンのディレクトリがあるかどうか確認しています。

また、インストールはされた状態になっているので、 brew cask install --force <app name>で強制的に再インストールしています。

一つ注意として、この中でチェックしてるバージョンは Caskでインストールしたバージョンなので、 例えばFirefoxなど、自分でアップデートする機能が付いているアプリに関しては アプリ側でアップデートしていても再インストールされます。

場合によってはCaskの定義が古いと古いバージョンで上書きしてしまう可能性もあるので 注意してください。 インストール後、さらにアプリ側でアップデートをすれば最新になりますが、 ちょっと面倒があるかもしれません。

追記: 2016/09/06

実際に面倒が起こった事例。

追記ここまで

Sponsored Links
Sponsored Links

« Go言語のHello, worldは1972年に既に書かれていた Homebrewのアップデートされなくなるバグとその解決法 »

}