少しの間触っていなかったMac miniで、パッケージ管理ツールHomebrewで入れているコマンド群を brew update && brew upgrade
を実行したところ、分散バージョン管理システムMercurialの hg
コマンドを実行しようとすると「already installed, it's just not linked」怒られるようになってしまった。
次のように brew link
を実行したら、 最新の hg
コマンドが使えるように解決した。
$ brew link --overwrite mercurial
多分だけど、HomebrewのMercurialパッケージがbottle化されたことが原因のように考えられる。
bottleというのは、いわゆるaptやyumのようなバイナリ配布形式で、Mercurial 2.xまでは brew install mercurial
を実行した時はソースコードをダウンロードして来てビルドする挙動だったように記憶している。これがバイナリ配布形式に変わって、 brew link --overwrite
が必要になったのではないか。現にFormula/mercurial.rbのコミットログを参照すると、Mercurial 3.0.1前後にbottle云々というものが登場する。
Homebrewも使い始めた頃は大半のパッケージが手元でビルドされていて、単なるMakefileラッパー + 管理システムのような印象のツールだったけど、2014-11現在ではbottleとしてバイナリ配布されるパッケージが増えているのを感じる。サクサクと短い時間でインストールが完了するようになって便利だ。