svi/lib/svi/cli.rb

79 lines
1.6 KiB
Ruby

require "yawpa"
module Svi
class Cli
ALIASES = {
"co" => "checkout",
}
HELP_TEXT = <<EOS
Usage: svi [options] <command> [parameters...]
Global options:
--version show svi version and exit
--help, -h show this help and exit
Commands:
checkout/co check out Subversion URL
EOS
def initialize
@application = Application.new
end
def run(params)
options = {
version: {},
help: {short: "h"},
}
opts, args = Yawpa.parse(params, options, posix_order: true)
if opts[:version]
puts "svi, version #{Svi::VERSION}"
return 0
end
if opts[:help]
puts HELP_TEXT
return 0
end
if args.size < 1
$stderr.puts HELP_TEXT
return 1
end
run_subcommand(*args)
end
private
def run_subcommand(subcommand, *params)
if ALIASES[subcommand]
subcommand = ALIASES[subcommand]
end
command_function = "cmd_#{subcommand}".to_sym
if private_methods.include?(command_function)
__send__(command_function, params)
else
$stderr.puts "Unknown command #{subcommand}"
1
end
end
def cmd_checkout(params)
options = {}
opts, args = Yawpa.parse(params, options, posix_order: true)
if args.size < 1
$stderr.puts "Error: must specify URL"
return 1
end
url, = args
@application.checkout(url)
end
def cmd_status(params)
options = {}
opts, args = Yawpa.parse(params, options, posix_order: true)
@application.status
end
end
end