Umi Uyuraのブログ

Titaniumを使ったスマートフォンアプリ開発を中心に、プログラミング関連の作業ログ。

BoxenのHomebrewで過去バージョンをインストールしようとして挫折

懲りずにBoxen弄ってます。

今回は、CarbonEmacs用にMagitの古いバージョンを使っているので、それをBoxenでインストールできないか試して挫折した記録です。

CarbonEmacsとMagitと私

私は普段Mac上でCarbonEmacsを使ってプログラミングやら文章書きなどしています。

最近ようやくバージョン管理にGitを使うようになってきたので、EmacsのGitクライアントであるMagitを合わせて使うようになりました。

ところが最新のMagitは、これまた最新24系もしくは23系がターゲットになっているようで、22系のCarbonEmacsではうまく動きませんでした。

さっさとEmacsを24系に移行すれば良いのですが、そうなると現状導入している他のlispなども含めて再設定が必要になりそうなので、先延ばししている状況です。

そのためMagitのバージョンを遡りながら試して、最低限動いた1.0.0を使っていました。

Boxenと合わせて使うようになったHomebrewのパッケージにMagitを発見したので、それであればBoxen使ってインストールしたいということで試してみました。

Homebrewで古いバージョンのパッケージをインストールする

ところで、Homebrewというパッケージ管理システムがあるので、古いバージョンをインストールすること自体は簡単だと思っていたのですが、若干面倒くさいですね。

  1. $ brew version <package> で存在するバージョンを確認する
  2. バージョンと合わせて出力されるgit checkoutを実行して、対応するバージョンのFormulaを入手する
  3. その状態で$ brew install <package> する

というような手順になると。

バージョン指定して一発!とかでないのがチョット残念。

参考:homebrew で旧バージョンのものを使いたい - @Konboi memo

BoxenのHomebrewモジュール

次に、Boxen上で古いバージョンのHomebrewパッケージをインストールする方法がないか、boxen/puppet-homebrew のREADMEを見てみました。

すると、homebrew::formulaという記法で、独自のFormula(*.rb)を読みこませられるような気がしたので、さっそく試してみることにしました。

まずは、存在するMagitの過去バージョンを確認。

$ brew versions magit
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
1.2.0    git checkout 689733e /opt/boxen/homebrew/Library/Formula/magit.rb
1.0.0    git checkout 3c5ca25 /opt/boxen/homebrew/Library/Formula/magit.rb
0.8.2    git checkout 0476235 /opt/boxen/homebrew/Library/Formula/magit.rb
0.8.1    git checkout a385f9e /opt/boxen/homebrew/Library/Formula/magit.rb

1.0.0をcheckout。

$ git checkout 3c5ca25 /opt/boxen/homebrew/Library/Formula/magit.rb

checkoutしたものを、Boxen環境にコピーしておきます。

$ cp /opt/boxen/homebrew/Library/Formula/magit.rb /opt/boxen/repo/modules/magit/brews/magit.rb

先のpuppet-homebrewのREADMEを参考に、個人用.ppにMagit用の設定を追記。

class magit {
  homebrew::formula {
    'magit': ;
  }

  package {
    'boxen/brews/magit':
      ensure => 'aversion' ;
  }
}
include magit

そして実行。

$ script/boxen

Error: /Stage[main]/People::Umi_uyura::Magit/Homebrew::Formula[magit]/File[/opt/boxen/homebrew/Library/Taps/boxen-brews/magit.rb]: Could not evaluate: Could not retrieve information from environment production source(s) puppet:///modules/magit/brews/magit.rb

動きませんでした。

良く見ると、/opt/boxen/homebrew/Library/Taps/boxen-brews/magit.rbというファイルを探しているようですが、これは存在していません。

そういえば、READMEの中にhomebrew::tap { 'homebrew/versions': }という記述もありました。

さらに、最初に古いバージョンの確認をした時、$ brew versionsは古いから、homebrew-versionstapしてくれというwarningも出てましたので、どうやらpuppet-homebrewもhomebrew-versionsを使う前提っぽいですね。

そして断念

で、この後homebrew-versionstapして、さらにREADME同様のhomebrew::tap { 'homebrew/versions': }を指定してみたのですが、うまくいきませんでした。

というのも、恐らくhomebrew-versionsnで過去のバージョンを扱うには、Homebrew/homebrew-versionsリポジトリに該当するプログラムのFormulaが必要なのだと思われるのですが、肝心のMagitのFormulaが見当たらなかったので、そう判断しました。

Boxen初心者かつHomebrew初心者には、これ以上深追いするとハマりそうだったのと、まずはMagitがEmacsで使える環境が欲しかったので、今回も諦めることにしました。

というわけで、おとなしくcheckoutしていたFormulaから過去バージョンをインストールしました。

$ brew info magit
magit: stable 1.0.0, HEAD
https://github.com/magit/magit
Not installed
From: https://github.com/mxcl/homebrew/commits/master/Library/Formula/magit.rb

$ brew install magit
=> Downloading https://github.com/downloads/magit/magit/magit-1.0.0.tar.gz
######################################################################## 100.0%
==> make install DESTDIR=/opt/boxen/homebrew/Cellar/magit/1.0.0 PREFIX=
🍺  /opt/boxen/homebrew/Cellar/magit/1.0.0: 11 files, 436K, built in 6 seconds

もう少しHomebrewやversionsの仕組みが理解できたら取り組んでみようかと思います。

いや、それよりEmacsのバージョンを上げる方が良いのか・・・