ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

mruby便利tips: 利用しているmgemのリビジョンを知りたい

mgemは、 mgem: 指定にしても github: 指定にしても基本的にgitリポジトリをチェックアウトして持ってくるようになっている。なので、チェックアウトした段階でのリビジョンが知りたいことがある。

build_config.rb に以下のようなモンキーパッチを書いておくと、

module MRuby
  module HookGemRevision
    def gem(gemdir, &block)
      gem = super(gemdir, &block)
      if File.exist? gem.dir + "/.git"
        print "#{gem.name}: revision="
        sh "git --git-dir #{gem.dir}/.git rev-parse HEAD"
      end
      gem
    end
  end

  class Build
    include HookGemRevision
  end
end

MRuby::Build.new do |conf|
  toolchain :gcc
  # ...
end

その時点でチェックアウトしている mgem のリビジョンを(可能な場合に)表示してくれて便利かもしれない。

$ rake
cd mruby && MRUBY_CONFIG=/Users/udzura/.ghq/github.com/udzura/mruby-argtable/build_config.rb rake all
mruby-argtable: revision=d0077ef2504be4cb3ae8e855dfe88a532fb6997b
mruby-dir: revision=0c3c538855dd15208d34fee96b13675e564bb4b6
CC    src/array.c -> build/host/src/array.o
CC    src/backtrace.c -> build/host/src/backtrace.o
CC    src/class.c -> build/host/src/class.o
CC    src/codedump.c -> build/host/src/codedump.o
CC    src/compar.c -> build/host/src/compar.o
CC    src/crc.c -> build/host/src/crc.o
...

(コアにこんな感じの機能が入ってもいい気がするが、どういうやり方があるか考え中...)