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もアップデートできないので。
