OptionParser を作成して、on でコマンドライン引数を追加するような感じ。
くわしくはここ [doc.okkez.net]で。
#!/c:/bin/ruby
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}`