前に書いたアーカイヴるスクリプトを optparse 使って書き直してみた

OptionParser を作成して、on でコマンドライン引数を追加するような感じ。
くわしくはここ [doc.okkez.net]で。

#!/c:/bin/ruby
# -*- encoding: shift_jis -*-
# archive.rb
require 'optparse'

opt         = OptionParser.new
opt.version = "0.3.1"
OPTS        = {}

opt.on( '--format=ARCHIVE_TYPE', [:zip, :tar], "アーカイブのフォーマットを指定します。" ) do |archive_type|
  OPTS[:format] = archive_type
end

opt.on( '--target VERSION_TAG', "アーカイブするバージョンタグ名を指定します。" ) do |version_tag|
  OPTS[:target] = version_tag
end

opt.on( '-o PATH', "--output=PATH", "アーカイブを出力する場所を指定します。" ) do |path|
  OPTS[:output] = path
end

opt.parse!( ARGV )

versions        = `git tag`.split( /\n/ )
archive_name    = ""
if OPTS.has_key? :format then
  archive_type    = OPTS[:format]
else
  archive_type    = "zip"
end
package_name    = Dir.pwd.split( /\// ).pop

if OPTS.has_key? :target then
  target_version  = OPTS[:target]
else
  if versions.length > 0 then
    target_version = versions.collect { |x|
      x.gsub( /ver-/, "" )
    }.sort.pop
  else
    target_version = "HEAD"
  end
end

unless versions.include? target_version then
  puts "該当タグ名がありません。"

  exit
end

if OPTS.has_key? :output then
  path = OPTS[:output]
else
  path = ".."
end

if target_version == "HEAD" then
  archive_name = "#{package_name}-src.zip"
else
  archive_name = "#{package_name}-#{target_version.gsub( /ver-/, '' )}-src.#{archive_type}"
end

`git archive --format=#{archive_type} #{target_version} > #{path}/#{archive_name}`