rcmdnk's blog

Developers Code 本物のプログラマがしていること (アスキー書籍) | Ka Wai Cheung, 新丈 径 | 工学 | Kindleストア | Amazon

Homebrewで作業をしている時にどうも人と環境が違うな、と思っていたら、 現在のHomebrewではstable versionとmaster branchを使うdeveloper versionがあって、 いつの間にかdeveloper versionになっていました。

以前は全てmaster branchを追う形になっていましたが、1.0.0辺りから この辺のstableなリリースの形を始めたみたいです。

Homebrewのバージョンチェック

通常Homebrewのバージョンをチェックすると

$ brew --version
Homebrew 1.1.7
Homebrew/homebrew-core (git revision 7af1a; last commit 2017-01-17)

こんな感じでバージョンが表示されるはずです。 これが、もしdeveloper versionnになっていてmasterブランチのものを追ってるとすると、

$ brew --version
Homebrew 1.1.7-32-g10b8d27d11
Homebrew/homebrew-core (git revision 7af1a; last commit 2017-01-17)

こんな感じでHomebrwのバージョンの後ろにcommit番号(-32-gの後の10b…)が 追記される様なバージョンになります。

Homebrewのdeveloper version

このdeveloper versionになる方法は2つあって、一つは

export HOMEBREW_DEVELOPER=1

という環境変数を設定しておくことです。 この状態でbrew updateを走らせるとdeveloper versionになります。

man brewだと

HOMEBREW_DEVELOPER
       If  set,  Homebrew  will tweak behaviour to be more relevant for
       Homebrew developers (active or budding)  e.g.  turning  warnings
       into errors.

としか書いてありませんが、一度でもHOMEBREW_DEVELOPERを設定して brew updateすると、その後はHOMEBREW_DEVELOPERを設定しなくても ずっとdevelper versionのままになります。

もう一つはbrew auditbrew testなど、dev-cmdにあるコマンド群達を呼んだときで、 これらを一度でも呼んだ後にbrew updateをするとdeveloper versionになります。

実際にどうなってるかというと、Homebrewがインストールされてるディレクトリで ブランチがmasterであるかstableであるかによって切り替えを行っています。

$ cd /usr/local/Homebrew/
$ git branch
  master
* stable
  v1.0.2
  v1.0.4

stableになってれば通常のバージョンでmasterになってれば そのままレポジトリのmasterを追う形になっています。

stableは GitHubのリモートレポジトリ の方には無いローカルだけのブランチで、 Releasesの最新のものから作られています。

brew updateをすると、通常の場合はこのstableブランチの更新を行いますが、 既にmasterブランチである場合、HOMEBREW_DEVELOPERが設定してある場合、これまでに dev-cmdを使ったことがある場合はmasterブランチに切り替わってmasterブランチの更新を行います。

stable versionに戻す

stable versionに戻すにはbrewのコマンドからではいけなそうで、手動で行う必要があります。 上に書いた通りgitのブランチで管理されてるので、

$ cd /usr/local/Homebrew/
$ git checkout stable

としてあげればstable versionに戻れます。

但し、dev-cmdを使って移ってしまった場合はこのまままたbrew updateをすると develper versionに戻ってしまいます。

このフラッグは/usr/local/Homebrew/.git/configの中にある

[homebrew]
...
  devcmdrun = true

となってるhomebrew.devcmdrunと言う値です。 この値がtrueになってるとbrew updateの際にmasterブランチに変更されます。 なので、直接この行を消すなり、

$ git config --file /usr/local/Homebrew/.git/config --unset homebrew.devcmdrun

等としてこの設定を消してあげる必要があります。

これでbrew updateをしてもブランチの切り替えは起こらずにstable versionのままでいられます。

まとめ

この設定は以下のbrew-gemに出したpull requestに対して Homebrewのcommitterの人が返事をしてくれて分かりました。

added –ignore-dependencies option to uninstall by rcmdnk · Pull Request #37 · sportngin/brew-gem

brew versionの表示が比べるとなんか変だな、とは思ってたんですが、 自分の方が勝手にdeveloper versionになっていて違いが出てた様です。

dev-cmdにあるコマンドは、Homebrew自体の開発用以外にも、 Formulaのチェック用のコマンドもあるので、 それらのどれかは使ってるはずでずっとdeveloper version側を使ってたみたいです。

特に大きな問題があるわけではないのですが、 上みたいにHomebrew関係で何か問題が起こった時には一度 Homebrewのバージョンをチェックしてみて、developer versionなら stable versionに戻して問題が無いかチェックしてみる必要がありますよ、ということで。

Sponsored Links
Sponsored Links

« Linkcheckerが動かなくなっていたので取り敢えずの処置 GNU Screen 4.5.0リリース »

}