Brew-fileを色々アップデート
してる中で、Homebrewで入れてる方もアップデートしておこうとしたら
何故か入らなくて困ってましたが、
どうもHomebrewのバグでupdate
コマンドを使っても
Formulaがアップデートされないような状況になってしまってる場合があるようです。
brew updateのバグと解決法
レポジトリのREADMEにありますが、
8月10、11日辺りにbrew update
を実行していた場合、
それ以降brew update
できちんとHomebrewの更新が出来ていない可能性があります。
これを治すには
$ cd $(brew --repo) && git fetch && git reset --hard origin/master && brew update
の様にHomebrewのレポジトリを直接git
コマンドで最新版にしてあげればOK。
問題に当たっているかどうか分からない場合も 取り敢えず一度やっておくこと良いと思います。
大量のアップデートが入ってくればしばらくアップデートされてなかったということに。
ちなみに、このコマンド売ってみたら
$ brew --repo
usage: brew-file [-f INPUT] [-b BACKUP] [-F FORM] [--leaves]
[--top_packages TOP_PACKAGES] [-U] [--preupdate] [-r REPO]
[-n] [--caskonly] [--no_appstore] [-C] [-y] [-V VERBOSE]
[command] ...
brew-file: error: argument -r/--repo: expected one argument
みたいなエラーに成ってしまったんですが、これは
homebrew-file
で
brew-wrap
を使っていて、brew-file
の方に引数が渡されてしまっていたからな様子。
Homebrewのマニュアルを見ると、brew --repository
というオプションで
Homebrewのレポジトリを取得出来る、とのこと。
(--repo
でも可。)
brew --repository:
Display where Homebrew's .git directory is located. For standard installs,
the prefix and repository are the same directory.
brew --repository user/repo:
Display where tap user/repo's directory is located.
同様にbrew --prefix
というオプションもあって、こちらは
bin
ディレクトリなどの親ディレクトリになります。
brew --prefix:
Display Homebrew's install path. *Default:* /usr/local
brew --prefix formula:
Display the location in the cellar where formula is or would be installed.
通常は両方共同じく/usr/localになっています。
この--repository
の方のオプションがいつからあったか定かで無いんですが、
homebrew-fileの--repo
と競合してしまっています。
brew
の方では場所を表示するためだけのもので、オプションというよりサブコマンド的なものなので、
brew-wrapの中でこの引数が最初に来たらbrew
に直接渡すようにしました。
brew-wrap
を導入してると上のアップデートコマンドで上の様なエラーが出るかもしれませんが、
その場合は、
$ cd $(command brew --repo) && git fetch && git reset --hard origin/master && brew update
の様に、最初のbrew --repo
の前にcommand
を付けて直接brew
コマンドを実行する様にしてください。
このアップデートをしないとhomebrew-fileもアップデートできないので。