Homebrewで過去バージョンをインストールしたいぞ


背景

OpenAPIを使ったプロジェクトでopenapi-generatorコマンドでコードを自動生成したところ、僕が変更を加えた量より遥かに多い変更がされてしまった。
.openapi-generator/VERSION4.0.2になっている。
一方手元で

$ openapi-generator version

と打つと

4.1.1

が返ってくる。
要するにマスタとローカルでopenapi-generatorのバージョンが違うのが原因らしいので、openapi4.0.2をインストールしようということになった。

確認

openapi-generatorはHomebrewでbrew install openapi-generatorと打って取得したもの。

Homebrewに他のバージョンがあるか確認するにはbrew info openapi-generatorと打つ。

ここで例えば以下のように目標のバージョンがあった場合、

/usr/local/Cellar/openapi-generator/4.0.2 (4 files, 18.5MB)
  Built from source on 2019-08-31 at 15:50:00
/usr/local/Cellar/openapi-generator/4.1.1 (4 files, 18.8MB) *
  Built from source on 2019-08-31 at 15:35:33

brew switch openapi-generator 4.0.2などと打てばバージョンをスイッチできる。

取得

たぶん上の方法で無いことの方が多いと思うので、そのときはFormulaのバージョンを遡ってインストールする。

Formulaのディレクトリに移動

$ cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

ログを確認

$ git log openapi-generator.rb

ログはj/kで上下移動、qで終了など。
これで目標のcommitを探すのだけど、最近のcommitしか残ってない場合がある。そのときは

$ git fetch --depth 10000

みたいにdepthを指定してfetchすると昔のcommitが見れる。

するとこんな感じで目標のバージョンのcommit番号が分かるはず。

commit 3f66aa275955a9e3c042c48af2462f74cd051f5b
Author: William Cheng <[email protected]>
Date:   Thu Jun 20 14:30:01 2019 +0800

    openapi-generator 4.0.2 (#41145)

分かったら以下の感じで良い感じにする。

$ git checkout 3f66aa275955a9e3c042c48af2462f74cd051f5b openapi-generator.rb
$ brew unlink openapi-generator #一旦今のリンクを外す
$ HOMEBREW_NO_AUTO_UPDATE=1 brew install openapi-generator #自動更新無しにしてインストール

openapi-generator versionで欲しいバージョンになっていることを確認したら、git reset --hardで元に戻しておく。

以降は上のbrew switchを使ってバージョン行き来もできる。

参考リンク

Homebrewで旧バージョンのパッケージをインストールしたい
homebrew の git logを確認して Python 3.6.5のインストールしてみる。