diff --git a/lib/svi.rb b/lib/svi.rb index 68543f7..1d531f8 100644 --- a/lib/svi.rb +++ b/lib/svi.rb @@ -4,5 +4,11 @@ require_relative "svi/version" require "svi/svi" module Svi - # Your code goes here... + class << self + + def checkout(url) + 0 + end + + end end diff --git a/lib/svi/cli.rb b/lib/svi/cli.rb index c76fa79..c2b0334 100644 --- a/lib/svi/cli.rb +++ b/lib/svi/cli.rb @@ -1,9 +1,70 @@ +require "yawpa" + module Svi module Cli class << self - def run(args) - 0 + + ALIASES = { + "co" => "checkout", + } + + HELP_TEXT = < [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 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) + Cli.__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 + Svi.checkout(url) + end + end end end