Yosemiteアップグレード後に発生したHomebrewのエラー対応（2015年9月版）

OS X MavericksからYosemiteへのアップグレード後、`$ brew doctor`を実行したらエラーが発生したので、対処してみました。
同様のエラーメッセージで検索すると、`brew.rb`を書き換える等の対応法が出てくるのですが、2015年9月現在ではHomebrew側ですでに対策がされているようなので、むやみに書き換えない方が良さそうです。
下記に経緯と結論をまとめたので、最新版の情報として参考にしてください。

# エラー対応の経緯

OS X MavericksからYosemiteへのアップグレード後、`$ brew doctor`を実行すると、以下のエラーが発生。

```
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 21: /usr/local/Library/brew.rb: Undefined error: 0
```

そこで、下記ページを参考に`/usr/local/Library/brew.rb`の記述を編集してみた。

- [Mac - Yosemiteでbrewが壊れた - Qiita](http://qiita.com/sue738/items/7ab03ecc9f6fcf37408d)

```/usr/local/Library/brew.rb(変更前)
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0
```

```/usr/local/Library/brew.rb(変更後)
#!/System/Library/Frameworks/Ruby.framework/Versions/current/usr/bin/ruby -W0
```

すると今度は以下のエラーが発生。

```
Homebrew requires Leopard or higher. For Tiger support, see:
https://github.com/mistydemeo/tigerbrew
```

Mac OSの判定をする部分でYosemiteの判別がうまくいっていないようなので、下記ページを参考に`/usr/local/Library/brew.rb`の記述を編集してみた。

- [osx - Homebrew on Mac Os 10.10 or 10.11 is not working - Stack Overflow](http://stackoverflow.com/questions/26501126/homebrew-on-mac-os-10-10-or-10-11-is-not-working)

```/usr/local/Library/brew.rb(変更前)
if MACOS and MACOS_VERSION < 10.5
  abort <<-EOABORT.undent
    Homebrew requires Leopard or higher. For Tiger support, see:
    http://github.com/sceaga/homebrew/tree/tiger
  EOABORT
end
```

```/usr/local/Library/brew.rb(変更後)
if MACOS and MACOS_VERSION < 10.5 and MACOS_VERSION != 10.1 and MACOS_VERSION != 10.11
  abort <<-EOABORT.undent
    Homebrew requires Leopard or higher. For Tiger support, see:
    http://github.com/sceaga/homebrew/tree/tiger
  EOABORT
end
```

すると今度は下記のエラーが出てしまい、うまくいかず。

```
Mac OS X `10.1' is invalid
```

そこで、まずは先の記事にあった通り、`brew.rb`の変更分を`git commit`することに・・。

```
cd /usr/local/
git add Library/brew.rb
git commit -m "Fix brew.rb for yosemite update"

[master 7d35673] Fix brew.rb for yosemite update
 1 file changed, 2 insertions(+), 2 deletions(-)
```

それでもエラーメッセージが変わらないので、試しに`brew update`してみた。

```
$ brew update

error: Your local changes to the following files would be overwritten by merge:
	README.md
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
```

すると、`README.md`に差分があるとのことなので、リモートの内容を上書きすることに。
その後、改めて`brew update`を実行。

```
$ git checkout README.md
$ brew update

Automatic merge failed; fix conflicts and then commit the result.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
```

すると、今度は`brew.rb`に差分が生まれてしまった模様。

```
$ git status
（中略）
# Unmerged paths:
#   (use "git add <file>..." to mark resolution)
#
#	both modified:      Library/brew.rb
```

差分をチェックしたところ、リモート側の`brew.rb`がアップデートされており、
そもそも発生していたエラーに対する対策がなされていた模様。

```/usr/local/Library/brew.rb（リモート最新版）
#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
（中略）
if OS.mac? and MacOS.version < "10.6"
  abort <<-EOABORT.undent
    Homebrew requires Snow Leopard or higher. For Tiger and Leopard support, see:
    https://github.com/mistydemeo/tigerbrew
  EOABORT
end
```

そこで、リモートの内容を強制的に上書きして、最新の状態へ復帰させることに。

```
$ git reset --hard origin/master
```

すると、git上の差分はなくなり、当初発生していたエラーはなくなった。

# まとめ＆結論

Yosemiteのアップグレード直後は、Homebrew側の対応が間に合っておらず、
上記エラーを回避するためには`brew.rb`を直接編集し、`git commit`する必要があったものと思われる。

ただし、2015年9月現在は問題の箇所の記述は修正されており、最新版の`brew.rb`にアップデートすればエラーは解消される模様。

なので、Yosemiteへのアップグレード後に上記のエラーが発生したら、まずは

```
$ brew update
```

を実行するか、下記コマンド等によってローカル側の`/usr/local/Library/brew.rb`を更新することをお勧めします。

```
$ git reset --hard origin/master
```

上記を実行するだけで、問題のエラーは解消するものと思われます。