lib/ronin/ui/command_line/commands/add.rb in ronin-0.2.4 vs lib/ronin/ui/command_line/commands/add.rb in ronin-0.3.0

- old
+ new

@@ -1,9 +1,7 @@ # -#-- -# Ronin - A Ruby platform designed for information security and data -# exploration tasks. +# Ronin - A Ruby platform for exploit development and security research. # # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,11 +14,10 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -#++ # require 'ronin/ui/command_line/command' require 'ronin/platform/overlay' @@ -28,76 +25,51 @@ module UI module CommandLine module Commands class Add < Command - def defaults - @cache = nil - @media = nil - @uri = nil - end + desc "add PATH", "Add a local overlay to the Overlay cache" + method_option :cache, :type => :string, :aliases => '-C' + method_option :media, :type => :string, :aliases => '-m' + method_option :local, :type => :boolean, :aliases => '-L' + method_option :rsync, :type => :boolean + method_option :svn, :type => :boolean + method_option :hg, :type => :boolean + method_option :git, :type => :boolean + method_option :uri, :type => :string, :aliaes => '-U' - def define_options(opts) - opts.usage = 'PATH [options]' - - opts.options do - opts.on('-C','--cache DIR','Specify an alternate overlay cache') do |dir| - @cache = dir - end - - opts.on('-m','--media MEDIA','Spedify the media-type of the overlay') do |media| - @media = media.to_sym - end - - opts.on('-L','--local','Similiar to: -m local') do - @media = nil - end - - opts.on('--rsync','Alias for -m rsync') do - @media = :rsync - end - - opts.on('--svn','Alias for -m svn') do - @media = :svn - end - - opts.on('--hg','Alias for -m hg') do - @media = :hg - end - - opts.on('--git','Alias for -m git') do - @media = :git - end - - opts.on('-U','--uri URI','Specify the source URI of the overlay') do |uri| - @uri = uri - end + def default(path) + if options[:cache] + Platform.load_overlays(options[:cache]) end - opts.arguments( - 'PATH' => 'Add the overlay located at the specified PATH' - ) + overlay_options = {:path => path} - opts.summary %{ - Add a local overlay located at the specified PATH to the - Overlay cache - } - end + overlay_options[:media] = if options[:media] + options[:media].to_sym + elsif options.local? + nil + elsif options.rsync? + :rsync + elsif options.svn? + :svn + elsif options.hg? + :hg + elsif options.git? + :git + end - def arguments(*args) - unless args.length == 1 - fail('only one overlay path maybe specified') + if options[:uri] + overlay_options[:uri] = options[:uri] end - Platform.load_overlays(@cache) if @cache - - overlay_options = {:path => args.first} - - overlay_options[:media] = @media if @media - overlay_options[:uri] = @uri if @uri - - Platform.add(overlay_options) do |overlay| - puts "Overlay #{overlay.name.dump} added." + begin + Platform.add(overlay_options) do |overlay| + print_info "Overlay #{overlay.name.dump} added." + end + rescue Platform::OverlayNotFound, Platform::OverlayCached => e + print_error e.message + exit -1 end end end end