40 lines
669 B
Crystal
40 lines
669 B
Crystal
require "option_parser"
|
|
|
|
require "./package/*"
|
|
|
|
root : String? = nil
|
|
args = [] of String
|
|
|
|
OptionParser.parse do |parser|
|
|
parser.banner = "usage: package [options] <command> [arguments]"
|
|
|
|
parser.unknown_args do |unknown_args|
|
|
args = unknown_args
|
|
end
|
|
end
|
|
|
|
context = Package::Context.new
|
|
|
|
context.root = root unless root.nil?
|
|
|
|
command = args[0]
|
|
args.shift
|
|
|
|
begin
|
|
case command
|
|
when "add"
|
|
context.install args
|
|
when "remove"
|
|
context.remove args.map { |s| Package::Atom.from_string s }
|
|
end
|
|
rescue e : Package::CollisionException
|
|
context.error e
|
|
|
|
e.collisions.each do |file|
|
|
context.error " - #{file}"
|
|
end
|
|
rescue e : Package::Exception
|
|
context.error e
|
|
end
|
|
|