зеркало из https://github.com/github/ruby.git
Update vendored optparse to 0.6.0
This commit is contained in:
Родитель
abb6f5c8bc
Коммит
cadf559a99
|
@ -8,7 +8,6 @@
|
|||
# See Gem::OptionParser for documentation.
|
||||
#
|
||||
|
||||
|
||||
#--
|
||||
# == Developer Documentation (not for RDoc output)
|
||||
#
|
||||
|
@ -425,7 +424,8 @@
|
|||
# If you have any questions, file a ticket at http://bugs.ruby-lang.org.
|
||||
#
|
||||
class Gem::OptionParser
|
||||
Gem::OptionParser::Version = "0.4.0"
|
||||
# The version string
|
||||
Gem::OptionParser::Version = "0.6.0"
|
||||
|
||||
# :stopdoc:
|
||||
NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
|
||||
|
@ -438,6 +438,8 @@ class Gem::OptionParser
|
|||
# and resolved against a list of acceptable values.
|
||||
#
|
||||
module Completion
|
||||
# :nodoc:
|
||||
|
||||
def self.regexp(key, icase)
|
||||
Regexp.new('\A' + Regexp.quote(key).gsub(/\w+\b/, '\&\w*'), icase)
|
||||
end
|
||||
|
@ -459,7 +461,7 @@ class Gem::OptionParser
|
|||
candidates
|
||||
end
|
||||
|
||||
def candidate(key, icase = false, pat = nil)
|
||||
def candidate(key, icase = false, pat = nil, &_)
|
||||
Completion.candidate(key, icase, pat, &method(:each))
|
||||
end
|
||||
|
||||
|
@ -510,6 +512,8 @@ class Gem::OptionParser
|
|||
# RequiredArgument, etc.
|
||||
#
|
||||
class Switch
|
||||
# :nodoc:
|
||||
|
||||
attr_reader :pattern, :conv, :short, :long, :arg, :desc, :block
|
||||
|
||||
#
|
||||
|
@ -697,6 +701,11 @@ class Gem::OptionParser
|
|||
q.object_group(self) {pretty_print_contents(q)}
|
||||
end
|
||||
|
||||
def omitted_argument(val) # :nodoc:
|
||||
val.pop if val.size == 3 and val.last.nil?
|
||||
val
|
||||
end
|
||||
|
||||
#
|
||||
# Switch that takes no arguments.
|
||||
#
|
||||
|
@ -710,10 +719,10 @@ class Gem::OptionParser
|
|||
conv_arg(arg)
|
||||
end
|
||||
|
||||
def self.incompatible_argument_styles(*)
|
||||
def self.incompatible_argument_styles(*) # :nodoc:
|
||||
end
|
||||
|
||||
def self.pattern
|
||||
def self.pattern # :nodoc:
|
||||
Object
|
||||
end
|
||||
|
||||
|
@ -730,7 +739,7 @@ class Gem::OptionParser
|
|||
#
|
||||
# Raises an exception if argument is not present.
|
||||
#
|
||||
def parse(arg, argv)
|
||||
def parse(arg, argv, &_)
|
||||
unless arg
|
||||
raise MissingArgument if argv.empty?
|
||||
arg = argv.shift
|
||||
|
@ -755,7 +764,7 @@ class Gem::OptionParser
|
|||
if arg
|
||||
conv_arg(*parse_arg(arg, &error))
|
||||
else
|
||||
conv_arg(arg)
|
||||
omitted_argument conv_arg(arg)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -774,13 +783,14 @@ class Gem::OptionParser
|
|||
#
|
||||
def parse(arg, argv, &error)
|
||||
if !(val = arg) and (argv.empty? or /\A-./ =~ (val = argv[0]))
|
||||
return nil, block, nil
|
||||
return nil, block
|
||||
end
|
||||
opt = (val = parse_arg(val, &error))[1]
|
||||
val = conv_arg(*val)
|
||||
if opt and !arg
|
||||
argv.shift
|
||||
else
|
||||
omitted_argument val
|
||||
val[0] = nil
|
||||
end
|
||||
val
|
||||
|
@ -798,6 +808,8 @@ class Gem::OptionParser
|
|||
# matching pattern and converter pair. Also provides summary feature.
|
||||
#
|
||||
class List
|
||||
# :nodoc:
|
||||
|
||||
# Map from acceptable argument types to pattern and converter pairs.
|
||||
attr_reader :atype
|
||||
|
||||
|
@ -837,7 +849,7 @@ class Gem::OptionParser
|
|||
def accept(t, pat = /.*/m, &block)
|
||||
if pat
|
||||
pat.respond_to?(:match) or
|
||||
raise TypeError, "has no `match'", ParseError.filter_backtrace(caller(2))
|
||||
raise TypeError, "has no 'match'", ParseError.filter_backtrace(caller(2))
|
||||
else
|
||||
pat = t if t.respond_to?(:match)
|
||||
end
|
||||
|
@ -1033,11 +1045,31 @@ XXX
|
|||
to << "#compdef #{name}\n"
|
||||
to << COMPSYS_HEADER
|
||||
visit(:compsys, {}, {}) {|o, d|
|
||||
to << %Q[ "#{o}[#{d.gsub(/[\"\[\]]/, '\\\\\&')}]" \\\n]
|
||||
to << %Q[ "#{o}[#{d.gsub(/[\\\"\[\]]/, '\\\\\&')}]" \\\n]
|
||||
}
|
||||
to << " '*:file:_files' && return 0\n"
|
||||
end
|
||||
|
||||
def help_exit
|
||||
if STDOUT.tty? && (pager = ENV.values_at(*%w[RUBY_PAGER PAGER]).find {|e| e && !e.empty?})
|
||||
less = ENV["LESS"]
|
||||
args = [{"LESS" => "#{!less || less.empty? ? '-' : less}Fe"}, pager, "w"]
|
||||
print = proc do |f|
|
||||
f.puts help
|
||||
rescue Errno::EPIPE
|
||||
# pager terminated
|
||||
end
|
||||
if Process.respond_to?(:fork) and false
|
||||
IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call(STDOUT)}
|
||||
# unreachable
|
||||
end
|
||||
IO.popen(*args, &print)
|
||||
else
|
||||
puts help
|
||||
end
|
||||
exit
|
||||
end
|
||||
|
||||
#
|
||||
# Default options for ARGV, which never appear in option summary.
|
||||
#
|
||||
|
@ -1049,8 +1081,7 @@ XXX
|
|||
#
|
||||
Officious['help'] = proc do |parser|
|
||||
Switch::NoArgument.new do |arg|
|
||||
puts parser.help
|
||||
exit
|
||||
parser.help_exit
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1129,6 +1160,10 @@ XXX
|
|||
default.to_i + 1
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# See self.inc
|
||||
#
|
||||
def inc(*args)
|
||||
self.class.inc(*args)
|
||||
end
|
||||
|
@ -1167,11 +1202,19 @@ XXX
|
|||
def terminate(arg = nil)
|
||||
self.class.terminate(arg)
|
||||
end
|
||||
#
|
||||
# See #terminate.
|
||||
#
|
||||
def self.terminate(arg = nil)
|
||||
throw :terminate, arg
|
||||
end
|
||||
|
||||
@stack = [DefaultList]
|
||||
#
|
||||
# Returns the global top option list.
|
||||
#
|
||||
# Do not use directly.
|
||||
#
|
||||
def self.top() DefaultList end
|
||||
|
||||
#
|
||||
|
@ -1192,9 +1235,9 @@ XXX
|
|||
#
|
||||
# Directs to reject specified class argument.
|
||||
#
|
||||
# +t+:: Argument class specifier, any object including Class.
|
||||
# +type+:: Argument class specifier, any object including Class.
|
||||
#
|
||||
# reject(t)
|
||||
# reject(type)
|
||||
#
|
||||
def reject(*args, &blk) top.reject(*args, &blk) end
|
||||
#
|
||||
|
@ -1284,10 +1327,24 @@ XXX
|
|||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Shows warning message with the program name
|
||||
#
|
||||
# +mesg+:: Message, defaulted to +$!+.
|
||||
#
|
||||
# See Kernel#warn.
|
||||
#
|
||||
def warn(mesg = $!)
|
||||
super("#{program_name}: #{mesg}")
|
||||
end
|
||||
|
||||
#
|
||||
# Shows message with the program name then aborts.
|
||||
#
|
||||
# +mesg+:: Message, defaulted to +$!+.
|
||||
#
|
||||
# See Kernel#abort.
|
||||
#
|
||||
def abort(mesg = $!)
|
||||
super("#{program_name}: #{mesg}")
|
||||
end
|
||||
|
@ -1309,6 +1366,9 @@ XXX
|
|||
#
|
||||
# Pushes a new List.
|
||||
#
|
||||
# If a block is given, yields +self+ and returns the result of the
|
||||
# block, otherwise returns +self+.
|
||||
#
|
||||
def new
|
||||
@stack.push(List.new)
|
||||
if block_given?
|
||||
|
@ -1532,6 +1592,12 @@ XXX
|
|||
nolong
|
||||
end
|
||||
|
||||
# ----
|
||||
# Option definition phase methods
|
||||
#
|
||||
# These methods are used to define options, or to construct an
|
||||
# Gem::OptionParser instance in other words.
|
||||
|
||||
# :call-seq:
|
||||
# define(*params, &block)
|
||||
#
|
||||
|
@ -1607,6 +1673,13 @@ XXX
|
|||
top.append(string, nil, nil)
|
||||
end
|
||||
|
||||
# ----
|
||||
# Arguments parse phase methods
|
||||
#
|
||||
# These methods parse +argv+, convert, and store the results by
|
||||
# calling handlers. As these methods do not modify +self+, +self+
|
||||
# can be frozen.
|
||||
|
||||
#
|
||||
# Parses command line arguments +argv+ in order. When a block is given,
|
||||
# each non-option argument is yielded. When optional +into+ keyword
|
||||
|
@ -1616,21 +1689,21 @@ XXX
|
|||
#
|
||||
# Returns the rest of +argv+ left unparsed.
|
||||
#
|
||||
def order(*argv, into: nil, &nonopt)
|
||||
def order(*argv, **keywords, &nonopt)
|
||||
argv = argv[0].dup if argv.size == 1 and Array === argv[0]
|
||||
order!(argv, into: into, &nonopt)
|
||||
order!(argv, **keywords, &nonopt)
|
||||
end
|
||||
|
||||
#
|
||||
# Same as #order, but removes switches destructively.
|
||||
# Non-option arguments remain in +argv+.
|
||||
#
|
||||
def order!(argv = default_argv, into: nil, &nonopt)
|
||||
def order!(argv = default_argv, into: nil, **keywords, &nonopt)
|
||||
setter = ->(name, val) {into[name.to_sym] = val} if into
|
||||
parse_in_order(argv, setter, &nonopt)
|
||||
parse_in_order(argv, setter, **keywords, &nonopt)
|
||||
end
|
||||
|
||||
def parse_in_order(argv = default_argv, setter = nil, &nonopt) # :nodoc:
|
||||
def parse_in_order(argv = default_argv, setter = nil, exact: require_exact, **, &nonopt) # :nodoc:
|
||||
opt, arg, val, rest = nil
|
||||
nonopt ||= proc {|a| throw :terminate, a}
|
||||
argv.unshift(arg) if arg = catch(:terminate) {
|
||||
|
@ -1641,19 +1714,24 @@ XXX
|
|||
opt, rest = $1, $2
|
||||
opt.tr!('_', '-')
|
||||
begin
|
||||
sw, = complete(:long, opt, true)
|
||||
if require_exact && !sw.long.include?(arg)
|
||||
throw :terminate, arg unless raise_unknown
|
||||
raise InvalidOption, arg
|
||||
if exact
|
||||
sw, = search(:long, opt)
|
||||
else
|
||||
sw, = complete(:long, opt, true)
|
||||
end
|
||||
rescue ParseError
|
||||
throw :terminate, arg unless raise_unknown
|
||||
raise $!.set_option(arg, true)
|
||||
else
|
||||
unless sw
|
||||
throw :terminate, arg unless raise_unknown
|
||||
raise InvalidOption, arg
|
||||
end
|
||||
end
|
||||
begin
|
||||
opt, cb, val = sw.parse(rest, argv) {|*exc| raise(*exc)}
|
||||
val = cb.call(val) if cb
|
||||
setter.call(sw.switch_name, val) if setter
|
||||
val = callback!(cb, 1, val) if cb
|
||||
callback!(setter, 2, sw.switch_name, val) if setter
|
||||
rescue ParseError
|
||||
raise $!.set_option(arg, rest)
|
||||
end
|
||||
|
@ -1671,7 +1749,7 @@ XXX
|
|||
val = arg.delete_prefix('-')
|
||||
has_arg = true
|
||||
rescue InvalidOption
|
||||
raise if require_exact
|
||||
raise if exact
|
||||
# if no short options match, try completion with long
|
||||
# options.
|
||||
sw, = complete(:long, opt)
|
||||
|
@ -1691,8 +1769,8 @@ XXX
|
|||
end
|
||||
begin
|
||||
argv.unshift(opt) if opt and (!rest or (opt = opt.sub(/\A-*/, '-')) != '-')
|
||||
val = cb.call(val) if cb
|
||||
setter.call(sw.switch_name, val) if setter
|
||||
val = callback!(cb, 1, val) if cb
|
||||
callback!(setter, 2, sw.switch_name, val) if setter
|
||||
rescue ParseError
|
||||
raise $!.set_option(arg, arg.length > 2)
|
||||
end
|
||||
|
@ -1718,6 +1796,19 @@ XXX
|
|||
end
|
||||
private :parse_in_order
|
||||
|
||||
# Calls callback with _val_.
|
||||
def callback!(cb, max_arity, *args) # :nodoc:
|
||||
args.compact!
|
||||
|
||||
if (size = args.size) < max_arity and cb.to_proc.lambda?
|
||||
(arity = cb.arity) < 0 and arity = (1-arity)
|
||||
arity = max_arity if arity > max_arity
|
||||
args[arity - 1] = nil if arity > size
|
||||
end
|
||||
cb.call(*args)
|
||||
end
|
||||
private :callback!
|
||||
|
||||
#
|
||||
# Parses command line arguments +argv+ in permutation mode and returns
|
||||
# list of non-option arguments. When optional +into+ keyword
|
||||
|
@ -1725,18 +1816,18 @@ XXX
|
|||
# <code>[]=</code> method (so it can be Hash, or OpenStruct, or other
|
||||
# similar object).
|
||||
#
|
||||
def permute(*argv, into: nil)
|
||||
def permute(*argv, **keywords)
|
||||
argv = argv[0].dup if argv.size == 1 and Array === argv[0]
|
||||
permute!(argv, into: into)
|
||||
permute!(argv, **keywords)
|
||||
end
|
||||
|
||||
#
|
||||
# Same as #permute, but removes switches destructively.
|
||||
# Non-option arguments remain in +argv+.
|
||||
#
|
||||
def permute!(argv = default_argv, into: nil)
|
||||
def permute!(argv = default_argv, **keywords)
|
||||
nonopts = []
|
||||
order!(argv, into: into, &nonopts.method(:<<))
|
||||
order!(argv, **keywords, &nonopts.method(:<<))
|
||||
argv[0, 0] = nonopts
|
||||
argv
|
||||
end
|
||||
|
@ -1748,20 +1839,20 @@ XXX
|
|||
# values are stored there via <code>[]=</code> method (so it can be Hash,
|
||||
# or OpenStruct, or other similar object).
|
||||
#
|
||||
def parse(*argv, into: nil)
|
||||
def parse(*argv, **keywords)
|
||||
argv = argv[0].dup if argv.size == 1 and Array === argv[0]
|
||||
parse!(argv, into: into)
|
||||
parse!(argv, **keywords)
|
||||
end
|
||||
|
||||
#
|
||||
# Same as #parse, but removes switches destructively.
|
||||
# Non-option arguments remain in +argv+.
|
||||
#
|
||||
def parse!(argv = default_argv, into: nil)
|
||||
def parse!(argv = default_argv, **keywords)
|
||||
if ENV.include?('POSIXLY_CORRECT')
|
||||
order!(argv, into: into)
|
||||
order!(argv, **keywords)
|
||||
else
|
||||
permute!(argv, into: into)
|
||||
permute!(argv, **keywords)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1784,7 +1875,7 @@ XXX
|
|||
# # params[:bar] = "x" # --bar x
|
||||
# # params[:zot] = "z" # --zot Z
|
||||
#
|
||||
def getopts(*args, symbolize_names: false)
|
||||
def getopts(*args, symbolize_names: false, **keywords)
|
||||
argv = Array === args.first ? args.shift : default_argv
|
||||
single_options, *long_options = *args
|
||||
|
||||
|
@ -1812,7 +1903,7 @@ XXX
|
|||
end
|
||||
end
|
||||
|
||||
parse_in_order(argv, result.method(:[]=))
|
||||
parse_in_order(argv, result.method(:[]=), **keywords)
|
||||
symbolize_names ? result.transform_keys(&:to_sym) : result
|
||||
end
|
||||
|
||||
|
@ -1881,6 +1972,9 @@ XXX
|
|||
DidYouMean.formatter.message_for(all_candidates & checker.correct(opt))
|
||||
end
|
||||
|
||||
#
|
||||
# Return candidates for +word+.
|
||||
#
|
||||
def candidate(word)
|
||||
list = []
|
||||
case word
|
||||
|
@ -1922,10 +2016,10 @@ XXX
|
|||
# The optional +into+ keyword argument works exactly like that accepted in
|
||||
# method #parse.
|
||||
#
|
||||
def load(filename = nil, into: nil)
|
||||
def load(filename = nil, **keywords)
|
||||
unless filename
|
||||
basename = File.basename($0, '.*')
|
||||
return true if load(File.expand_path(basename, '~/.options'), into: into) rescue nil
|
||||
return true if load(File.expand_path(basename, '~/.options'), **keywords) rescue nil
|
||||
basename << ".options"
|
||||
return [
|
||||
# XDG
|
||||
|
@ -1937,11 +2031,11 @@ XXX
|
|||
'~/config/settings',
|
||||
].any? {|dir|
|
||||
next if !dir or dir.empty?
|
||||
load(File.expand_path(basename, dir), into: into) rescue nil
|
||||
load(File.expand_path(basename, dir), **keywords) rescue nil
|
||||
}
|
||||
end
|
||||
begin
|
||||
parse(*File.readlines(filename, chomp: true), into: into)
|
||||
parse(*File.readlines(filename, chomp: true), **keywords)
|
||||
true
|
||||
rescue Errno::ENOENT, Errno::ENOTDIR
|
||||
false
|
||||
|
@ -1954,10 +2048,10 @@ XXX
|
|||
#
|
||||
# +env+ defaults to the basename of the program.
|
||||
#
|
||||
def environment(env = File.basename($0, '.*'))
|
||||
def environment(env = File.basename($0, '.*'), **keywords)
|
||||
env = ENV[env] || ENV[env.upcase] or return
|
||||
require 'shellwords'
|
||||
parse(*Shellwords.shellwords(env))
|
||||
parse(*Shellwords.shellwords(env), **keywords)
|
||||
end
|
||||
|
||||
#
|
||||
|
@ -2123,6 +2217,7 @@ XXX
|
|||
# Reason which caused the error.
|
||||
Reason = 'parse error'
|
||||
|
||||
# :nodoc:
|
||||
def initialize(*args, additional: nil)
|
||||
@additional = additional
|
||||
@arg0, = args
|
||||
|
@ -2273,19 +2368,19 @@ XXX
|
|||
# Parses +self+ destructively in order and returns +self+ containing the
|
||||
# rest arguments left unparsed.
|
||||
#
|
||||
def order!(&blk) options.order!(self, &blk) end
|
||||
def order!(**keywords, &blk) options.order!(self, **keywords, &blk) end
|
||||
|
||||
#
|
||||
# Parses +self+ destructively in permutation mode and returns +self+
|
||||
# containing the rest arguments left unparsed.
|
||||
#
|
||||
def permute!() options.permute!(self) end
|
||||
def permute!(**keywords) options.permute!(self, **keywords) end
|
||||
|
||||
#
|
||||
# Parses +self+ destructively and returns +self+ containing the
|
||||
# rest arguments left unparsed.
|
||||
#
|
||||
def parse!() options.parse!(self) end
|
||||
def parse!(**keywords) options.parse!(self, **keywords) end
|
||||
|
||||
#
|
||||
# Substitution of getopts is possible as follows. Also see
|
||||
|
@ -2298,8 +2393,8 @@ XXX
|
|||
# rescue Gem::OptionParser::ParseError
|
||||
# end
|
||||
#
|
||||
def getopts(*args, symbolize_names: false)
|
||||
options.getopts(self, *args, symbolize_names: symbolize_names)
|
||||
def getopts(*args, symbolize_names: false, **keywords)
|
||||
options.getopts(self, *args, symbolize_names: symbolize_names, **keywords)
|
||||
end
|
||||
|
||||
#
|
||||
|
@ -2309,7 +2404,8 @@ XXX
|
|||
super
|
||||
obj.instance_eval {@optparse = nil}
|
||||
end
|
||||
def initialize(*args)
|
||||
|
||||
def initialize(*args) # :nodoc:
|
||||
super
|
||||
@optparse = nil
|
||||
end
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
# frozen_string_literal: false
|
||||
require_relative '../optparse'
|
||||
|
||||
#
|
||||
# autoconf-like options.
|
||||
#
|
||||
class Gem::OptionParser::AC < Gem::OptionParser
|
||||
# :stopdoc:
|
||||
private
|
||||
|
||||
def _check_ac_args(name, block)
|
||||
|
@ -14,6 +18,7 @@ class Gem::OptionParser::AC < Gem::OptionParser
|
|||
end
|
||||
|
||||
ARG_CONV = proc {|val| val.nil? ? true : val}
|
||||
private_constant :ARG_CONV
|
||||
|
||||
def _ac_arg_enable(prefix, name, help_string, block)
|
||||
_check_ac_args(name, block)
|
||||
|
@ -29,16 +34,27 @@ class Gem::OptionParser::AC < Gem::OptionParser
|
|||
enable
|
||||
end
|
||||
|
||||
# :startdoc:
|
||||
|
||||
public
|
||||
|
||||
# Define <tt>--enable</tt> / <tt>--disable</tt> style option
|
||||
#
|
||||
# Appears as <tt>--enable-<i>name</i></tt> in help message.
|
||||
def ac_arg_enable(name, help_string, &block)
|
||||
_ac_arg_enable("enable", name, help_string, block)
|
||||
end
|
||||
|
||||
# Define <tt>--enable</tt> / <tt>--disable</tt> style option
|
||||
#
|
||||
# Appears as <tt>--disable-<i>name</i></tt> in help message.
|
||||
def ac_arg_disable(name, help_string, &block)
|
||||
_ac_arg_enable("disable", name, help_string, block)
|
||||
end
|
||||
|
||||
# Define <tt>--with</tt> / <tt>--without</tt> style option
|
||||
#
|
||||
# Appears as <tt>--with-<i>name</i></tt> in help message.
|
||||
def ac_arg_with(name, help_string, &block)
|
||||
_check_ac_args(name, block)
|
||||
|
||||
|
|
|
@ -7,12 +7,17 @@ class Gem::OptionParser
|
|||
#
|
||||
# :include: ../../doc/optparse/creates_option.rdoc
|
||||
#
|
||||
def define_by_keywords(options, meth, **opts)
|
||||
meth.parameters.each do |type, name|
|
||||
# Defines options which set in to _options_ for keyword parameters
|
||||
# of _method_.
|
||||
#
|
||||
# Parameters for each keywords are given as elements of _params_.
|
||||
#
|
||||
def define_by_keywords(options, method, **params)
|
||||
method.parameters.each do |type, name|
|
||||
case type
|
||||
when :key, :keyreq
|
||||
op, cl = *(type == :key ? %w"[ ]" : ["", ""])
|
||||
define("--#{name}=#{op}#{name.upcase}#{cl}", *opts[name]) do |o|
|
||||
define("--#{name}=#{op}#{name.upcase}#{cl}", *params[name]) do |o|
|
||||
options[name] = o
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,11 @@
|
|||
# Gem::OptionParser internal utility
|
||||
|
||||
class << Gem::OptionParser
|
||||
#
|
||||
# Shows version string in packages if Version is defined.
|
||||
#
|
||||
# +pkgs+:: package list
|
||||
#
|
||||
def show_version(*pkgs)
|
||||
progname = ARGV.options.program_name
|
||||
result = false
|
||||
|
@ -47,6 +52,8 @@ class << Gem::OptionParser
|
|||
result
|
||||
end
|
||||
|
||||
# :stopdoc:
|
||||
|
||||
def each_const(path, base = ::Object)
|
||||
path.split(/::|\//).inject(base) do |klass, name|
|
||||
raise NameError, path unless Module === klass
|
||||
|
@ -68,4 +75,6 @@ class << Gem::OptionParser
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
# :startdoc:
|
||||
end
|
||||
|
|
|
@ -7,7 +7,7 @@ gem "molinillo", github: "cocoapods/molinillo"
|
|||
gem "net-http", "0.4.1"
|
||||
gem "net-http-persistent", "4.0.4"
|
||||
gem "net-protocol", "0.2.2"
|
||||
gem "optparse", "0.4.0"
|
||||
gem "optparse", "0.6.0"
|
||||
gem "pub_grub", github: "jhawthorn/pub_grub"
|
||||
gem "resolv", "0.4.0"
|
||||
gem "securerandom", "0.3.1"
|
||||
|
|
Загрузка…
Ссылка в новой задаче