Change crew to use docopt.

parent cac783b7
...@@ -5,9 +5,38 @@ require 'uri' ...@@ -5,9 +5,38 @@ require 'uri'
require 'digest/sha2' require 'digest/sha2'
require 'json' require 'json'
require 'fileutils' require 'fileutils'
require 'docopt'
doc = <<DOCOPT
Chromebrw - Package manager for Chrome OS http://skycocker.github.io/chromebrew/
Usage:
#{__FILE__} build [-k|--keep] <name>...
#{__FILE__} download <name>...
#{__FILE__} help [<command>]
#{__FILE__} install [-k|--keep] <name>...
#{__FILE__} remove <name>...
#{__FILE__} search [-d|--desc] [<name>...]
#{__FILE__} update
#{__FILE__} upgrade [-k|--keep] [<name>...]
#{__FILE__} whatprovides <name>...
-k --keep Keep extracted files as is.
-d --desc Show extra information.
-h --help Show this screen.
version 0.4.3
DOCOPT
begin
args = Docopt::docopt(doc)
rescue Docopt::Exit => e
puts e.message
exit 1
end
@command = ARGV[0] @opt_keep = args["--keep"]
@pkgName = ARGV[1] @opt_desc = args["--desc"]
ARCH = `uname -m`.strip ARCH = `uname -m`.strip
ARCH_LIB = if ARCH == 'x86_64' then 'lib64' else 'lib' end ARCH_LIB = if ARCH == 'x86_64' then 'lib64' else 'lib' end
...@@ -168,14 +197,14 @@ def regexp_search(pkgName) ...@@ -168,14 +197,14 @@ def regexp_search(pkgName)
results = Dir["#{CREW_LIB_PATH}packages/*.rb"].sort \ results = Dir["#{CREW_LIB_PATH}packages/*.rb"].sort \
.select { |f| File.basename(f, '.rb') =~ Regexp.new(pkgName, true) } \ .select { |f| File.basename(f, '.rb') =~ Regexp.new(pkgName, true) } \
.collect { |f| File.basename(f, '.rb') } \ .collect { |f| File.basename(f, '.rb') } \
.each { |f| print_package(f, ARGV[2] == "extra") } .each { |f| print_package(f, @opt_desc) }
if results.empty? if results.empty?
Find.find ("#{CREW_LIB_PATH}packages/") do |packageName| Find.find ("#{CREW_LIB_PATH}packages/") do |packageName|
if File.file? packageName if File.file? packageName
package = File.basename packageName, '.rb' package = File.basename packageName, '.rb'
search package, true search package, true
if ( @pkg.description =~ /#{pkgName}/i ) if ( @pkg.description =~ /#{pkgName}/i )
print_package(package, ARGV[2] == "extra") print_package(package, @opt_desc)
results.push(package) results.push(package)
end end
end end
...@@ -494,7 +523,7 @@ def resolve_dependencies_and_install ...@@ -494,7 +523,7 @@ def resolve_dependencies_and_install
abort "#{@pkg.name} failed to install: #{e.to_s}".lightred abort "#{@pkg.name} failed to install: #{e.to_s}".lightred
ensure ensure
#cleanup #cleanup
unless ARGV[2] == 'keep' unless @opt_keep
Dir.chdir CREW_BREW_DIR do Dir.chdir CREW_BREW_DIR do
system "rm -rf *" system "rm -rf *"
system "mkdir dest" #this is a little ugly, feel free to find a better way system "mkdir dest" #this is a little ugly, feel free to find a better way
...@@ -633,7 +662,7 @@ def resolve_dependencies_and_build ...@@ -633,7 +662,7 @@ def resolve_dependencies_and_build
abort "#{@pkg.name} failed to build: #{e.to_s}".lightred abort "#{@pkg.name} failed to build: #{e.to_s}".lightred
ensure ensure
#cleanup #cleanup
unless ARGV[2] == 'keep' unless @opt_keep
Dir.chdir CREW_BREW_DIR do Dir.chdir CREW_BREW_DIR do
system "rm -rf *" system "rm -rf *"
system "mkdir dest" #this is a little ugly, feel free to find a better way system "mkdir dest" #this is a little ugly, feel free to find a better way
...@@ -731,62 +760,77 @@ def remove (pkgName) ...@@ -731,62 +760,77 @@ def remove (pkgName)
end end
case @command def build_command (args)
when "help" args["<name>"].each do |name|
if @pkgName @pkgName = name
help @pkgName search @pkgName
else resolve_dependencies_and_build
puts "Usage: crew help [command]"
help nil
end
when "search"
if @pkgName
regexp_search @pkgName
else
list_packages
end
when "whatprovides"
if @pkgName
whatprovides @pkgName
else
help "whatprovides"
end end
when "download" end
if @pkgName
def download_command (args)
args["<name>"].each do |name|
@pkgName = name
search @pkgName search @pkgName
download download
end
end
def help_command (args)
if args["<command>"]
help args["<command>"]
else else
help "download" puts "Usage: crew help [command]"
help nil
end end
when "update" end
update
when "upgrade" def install_command (args)
upgrade args["<name>"].each do |name|
when "install" @pkgName = name
if @pkgName
search @pkgName search @pkgName
resolve_dependencies_and_install resolve_dependencies_and_install
else
help "install"
end end
when "build" end
if @pkgName
search @pkgName def remove_command (args)
resolve_dependencies_and_build args["<name>"].each do |name|
else remove name
help "build"
end end
when "remove" end
if @pkgName
remove @pkgName def search_command (args)
else args["<name>"].each do |name|
help "remove" regexp_search name
end.empty? and begin
list_packages
end end
when nil
puts "Chromebrew, version 0.4.3"
puts "Usage: crew [command] [package]"
help nil
else
puts "I have no idea how to do #{@command} :(".lightred
help nil
end end
def update_command (args)
update
end
def upgrade_command (args)
args["<name>"].each do |name|
@pkgName = name
upgrade
end.empty? and begin
upgrade
end
end
def whatprovides_command (args)
args["<name>"].each do |name|
whatprovides name
end
end
def is_command (name)
return false if name =~ /^[-<]/
return true
end
command_name = args.find { |k, v| v && is_command(k) } [0]
function = command_name + "_command"
send(function, args)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment