woshidan's loose leaf

ぼんやり勉強しています

gitのローカルリポジトリからお目当のタグを抽出する

今日は時間がないので渾身かも、と思ったコードに数行コメントつけてPOST!

  • シェルは便利なんだけどシェルの結果の文字列を気軽に処理したい時、ruby書いたことある人にとってはrubyがとても楽
  • rubyだとシェルのコマンドを %x( command ) などで実行できる
  • ruby xx.rb --params などのコマンドライン引数は ARGV に配列で入ってる
  • 一時的にディレクトリを移動したいだけなら Dir.chdir にブロック渡すのが便利
  • 他の人とディレクトリ構造が違う(ホームディレクトリなどは?) => ENV['HOME'] など ENV から取れるよ
  • git fetch remote-repo --tags で現在のステージの内容などを気にせずに git tag の出力だけ更新できるよ
    • git tag の出力は git FETCH_HEAD にある tag と一致していて*1、要するに git の管理対象のファイルの内容を読み書きしているわけではないので
    • 作業途中で同期のための雑な git stash しなくていいの嬉しい!
latest_tag = Dir.chdir("#{ENV['HOME']}/woshidan-test/sample-repo") do
  if fetch_remote
    puts "fetch tags from remote repository ..."
    %x( git fetch remote-repo --tags ) # ローカルリポジトリを最新にするコマンドを挟むことで自分を信じないことができる
    puts "done"
  end
  %x( git tag ).split("\n").select { |tag| tag.match(/お目当のタグの正規表現/) }.last
end

参考

*1:このファイルから出力されているわけではないだろうが