rubygems-update 3.7.2 → 4.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1413 -1323
- data/CODE_OF_CONDUCT.md +7 -129
- data/Manifest.txt +5 -11
- data/README.md +2 -2
- data/bundler/CHANGELOG.md +990 -917
- data/bundler/README.md +4 -4
- data/bundler/bundler.gemspec +3 -3
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/capistrano.rb +1 -19
- data/bundler/lib/bundler/cli/cache.rb +1 -11
- data/bundler/lib/bundler/cli/common.rb +20 -3
- data/bundler/lib/bundler/cli/config.rb +1 -2
- data/bundler/lib/bundler/cli/console.rb +5 -0
- data/bundler/lib/bundler/cli/exec.rb +29 -4
- data/bundler/lib/bundler/cli/gem.rb +19 -33
- data/bundler/lib/bundler/cli/install.rb +7 -82
- data/bundler/lib/bundler/cli/issue.rb +2 -2
- data/bundler/lib/bundler/cli/list.rb +33 -2
- data/bundler/lib/bundler/cli/plugin.rb +5 -1
- data/bundler/lib/bundler/cli/show.rb +1 -1
- data/bundler/lib/bundler/cli/update.rb +3 -3
- data/bundler/lib/bundler/cli.rb +75 -83
- data/bundler/lib/bundler/compact_index_client.rb +0 -1
- data/bundler/lib/bundler/current_ruby.rb +3 -15
- data/bundler/lib/bundler/definition.rb +45 -35
- data/bundler/lib/bundler/deployment.rb +1 -64
- data/bundler/lib/bundler/digest.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +13 -35
- data/bundler/lib/bundler/endpoint_specification.rb +0 -22
- data/bundler/lib/bundler/errors.rb +1 -5
- data/bundler/lib/bundler/feature_flag.rb +0 -33
- data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
- data/bundler/lib/bundler/friendly_errors.rb +2 -2
- data/bundler/lib/bundler/index.rb +0 -7
- data/bundler/lib/bundler/inline.rb +1 -1
- data/bundler/lib/bundler/installer/gem_installer.rb +0 -11
- data/bundler/lib/bundler/installer.rb +0 -6
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +2 -12
- data/bundler/lib/bundler/man/bundle-add.1 +1 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +3 -6
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +4 -6
- data/bundler/lib/bundler/man/bundle-cache.1 +2 -14
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +1 -14
- data/bundler/lib/bundler/man/bundle-check.1 +2 -5
- data/bundler/lib/bundler/man/bundle-check.1.ronn +0 -5
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +6 -33
- data/bundler/lib/bundler/man/bundle-config.1.ronn +20 -55
- data/bundler/lib/bundler/man/bundle-console.1 +1 -1
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +2 -5
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -5
- data/bundler/lib/bundler/man/bundle-fund.1 +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +3 -6
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +2 -5
- data/bundler/lib/bundler/man/bundle-help.1 +1 -1
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +8 -59
- data/bundler/lib/bundler/man/bundle-install.1.ronn +12 -107
- data/bundler/lib/bundler/man/bundle-issue.1 +1 -1
- data/bundler/lib/bundler/man/bundle-licenses.1 +1 -1
- data/bundler/lib/bundler/man/bundle-list.1 +6 -1
- data/bundler/lib/bundler/man/bundle-list.1.ronn +5 -0
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
- data/bundler/lib/bundler/man/bundle-plugin.1 +2 -9
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +0 -8
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +2 -8
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -8
- data/bundler/lib/bundler/man/bundle-show.1 +2 -5
- data/bundler/lib/bundler/man/bundle-show.1.ronn +0 -4
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -10
- data/bundler/lib/bundler/man/bundle.1.ronn +0 -9
- data/bundler/lib/bundler/man/gemfile.5 +1 -1
- data/bundler/lib/bundler/man/index.txt +0 -2
- data/bundler/lib/bundler/materialization.rb +1 -1
- data/bundler/lib/bundler/plugin/installer.rb +0 -10
- data/bundler/lib/bundler/plugin/source_list.rb +1 -1
- data/bundler/lib/bundler/plugin.rb +1 -1
- data/bundler/lib/bundler/resolver.rb +1 -1
- data/bundler/lib/bundler/ruby_dsl.rb +2 -0
- data/bundler/lib/bundler/ruby_version.rb +1 -3
- data/bundler/lib/bundler/rubygems_ext.rb +1 -1
- data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -1
- data/bundler/lib/bundler/rubygems_integration.rb +1 -5
- data/bundler/lib/bundler/self_manager.rb +1 -1
- data/bundler/lib/bundler/settings.rb +7 -26
- data/bundler/lib/bundler/shared_helpers.rb +8 -20
- data/bundler/lib/bundler/source/git/git_proxy.rb +3 -11
- data/bundler/lib/bundler/source/git.rb +2 -3
- data/bundler/lib/bundler/source/path.rb +3 -7
- data/bundler/lib/bundler/source/rubygems.rb +11 -17
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +4 -45
- data/bundler/lib/bundler/source_map.rb +2 -5
- data/bundler/lib/bundler/spec_set.rb +6 -15
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +7 -129
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/go.mod.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.go.tt +31 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +4 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +26 -23
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +50 -6
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +57 -52
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +5 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +57 -15
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +34 -21
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +12 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +9 -8
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +2 -2
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/vlad.rb +1 -14
- data/bundler/lib/bundler.rb +6 -28
- data/doc/MAINTAINERS.txt +0 -7
- data/doc/bundler/UPGRADING.md +11 -5
- data/doc/rubygems/CONTRIBUTING.md +1 -1
- data/lib/rubygems/basic_specification.rb +3 -9
- data/lib/rubygems/bundler_version_finder.rb +1 -0
- data/lib/rubygems/command.rb +1 -1
- data/lib/rubygems/command_manager.rb +3 -4
- data/lib/rubygems/commands/build_command.rb +0 -7
- data/lib/rubygems/commands/cert_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +1 -5
- data/lib/rubygems/commands/setup_command.rb +5 -3
- data/lib/rubygems/config_file.rb +1 -1
- data/lib/rubygems/dependency.rb +1 -1
- data/lib/rubygems/dependency_installer.rb +0 -77
- data/lib/rubygems/dependency_list.rb +1 -2
- data/lib/rubygems/deprecate.rb +74 -72
- data/lib/rubygems/doctor.rb +1 -1
- data/lib/rubygems/errors.rb +1 -1
- data/lib/rubygems/exceptions.rb +2 -3
- data/lib/rubygems/ext/builder.rb +6 -2
- data/lib/rubygems/ext/cargo_builder.rb +2 -2
- data/lib/rubygems/ext/cmake_builder.rb +97 -8
- data/lib/rubygems/ext/configure_builder.rb +2 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +6 -2
- data/lib/rubygems/ext/rake_builder.rb +2 -2
- data/lib/rubygems/gem_runner.rb +0 -1
- data/lib/rubygems/install_update_options.rb +1 -2
- data/lib/rubygems/installer.rb +16 -54
- data/lib/rubygems/name_tuple.rb +7 -1
- data/lib/rubygems/package/tar_header.rb +4 -4
- data/lib/rubygems/package/tar_reader.rb +2 -0
- data/lib/rubygems/package/tar_writer.rb +1 -1
- data/lib/rubygems/package.rb +21 -12
- data/lib/rubygems/platform.rb +31 -11
- data/lib/rubygems/remote_fetcher.rb +8 -5
- data/lib/rubygems/resolver/conflict.rb +1 -1
- data/lib/rubygems/resolver.rb +1 -1
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/source.rb +2 -2
- data/lib/rubygems/spec_fetcher.rb +4 -4
- data/lib/rubygems/specification.rb +5 -96
- data/lib/rubygems/specification_policy.rb +0 -36
- data/lib/rubygems/specification_record.rb +1 -1
- data/lib/rubygems/text.rb +1 -1
- data/lib/rubygems/uninstaller.rb +17 -6
- data/lib/rubygems/user_interaction.rb +6 -9
- data/lib/rubygems/util.rb +0 -22
- data/lib/rubygems/validator.rb +1 -1
- data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +25 -9
- data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +2 -2
- data/lib/rubygems/vendor/net-http/lib/net/http.rb +14 -14
- data/lib/rubygems/vendor/optparse/lib/optparse.rb +82 -41
- data/lib/rubygems/vendor/resolv/lib/resolv.rb +1 -1
- data/lib/rubygems/vendor/timeout/lib/timeout.rb +4 -1
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +57 -15
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +1 -1
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +34 -21
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +12 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +9 -8
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +2 -2
- data/lib/rubygems/version.rb +2 -17
- data/lib/rubygems/win_platform.rb +31 -0
- data/lib/rubygems.rb +10 -38
- data/rubygems-update.gemspec +4 -4
- metadata +10 -18
- data/bundler/lib/bundler/cli/inject.rb +0 -60
- data/bundler/lib/bundler/cli/viz.rb +0 -31
- data/bundler/lib/bundler/graph.rb +0 -152
- data/bundler/lib/bundler/man/bundle-inject.1 +0 -31
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +0 -32
- data/bundler/lib/bundler/man/bundle-viz.1 +0 -30
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +0 -36
- data/bundler/lib/bundler/similarity_detector.rb +0 -63
- data/lib/rubygems/commands/query_command.rb +0 -43
- data/lib/rubygems/compatibility.rb +0 -41
- data/lib/rubygems/install_default_message.rb +0 -13
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#
|
|
8
8
|
# See Gem::OptionParser for documentation.
|
|
9
9
|
#
|
|
10
|
+
require 'set' unless defined?(Set)
|
|
10
11
|
|
|
11
12
|
#--
|
|
12
13
|
# == Developer Documentation (not for RDoc output)
|
|
@@ -142,7 +143,7 @@
|
|
|
142
143
|
# Used:
|
|
143
144
|
#
|
|
144
145
|
# $ ruby optparse-test.rb -r
|
|
145
|
-
# optparse-test.rb:9:in
|
|
146
|
+
# optparse-test.rb:9:in '<main>': missing argument: -r (Gem::OptionParser::MissingArgument)
|
|
146
147
|
# $ ruby optparse-test.rb -r my-library
|
|
147
148
|
# You required my-library!
|
|
148
149
|
#
|
|
@@ -235,7 +236,7 @@
|
|
|
235
236
|
# $ ruby optparse-test.rb --user 2
|
|
236
237
|
# #<struct User id=2, name="Gandalf">
|
|
237
238
|
# $ ruby optparse-test.rb --user 3
|
|
238
|
-
# optparse-test.rb:15:in
|
|
239
|
+
# optparse-test.rb:15:in 'block in find_user': No User Found for id 3 (RuntimeError)
|
|
239
240
|
#
|
|
240
241
|
# === Store options to a Hash
|
|
241
242
|
#
|
|
@@ -425,7 +426,8 @@
|
|
|
425
426
|
#
|
|
426
427
|
class Gem::OptionParser
|
|
427
428
|
# The version string
|
|
428
|
-
|
|
429
|
+
VERSION = "0.8.0"
|
|
430
|
+
Version = VERSION # for compatibility
|
|
429
431
|
|
|
430
432
|
# :stopdoc:
|
|
431
433
|
NoArgument = [NO_ARGUMENT = :NONE, nil].freeze
|
|
@@ -461,6 +463,10 @@ class Gem::OptionParser
|
|
|
461
463
|
candidates
|
|
462
464
|
end
|
|
463
465
|
|
|
466
|
+
def self.completable?(key)
|
|
467
|
+
String.try_convert(key) or defined?(key.id2name)
|
|
468
|
+
end
|
|
469
|
+
|
|
464
470
|
def candidate(key, icase = false, pat = nil, &_)
|
|
465
471
|
Completion.candidate(key, icase, pat, &method(:each))
|
|
466
472
|
end
|
|
@@ -496,7 +502,6 @@ class Gem::OptionParser
|
|
|
496
502
|
end
|
|
497
503
|
end
|
|
498
504
|
|
|
499
|
-
|
|
500
505
|
#
|
|
501
506
|
# Map from option/keyword string to object with completion.
|
|
502
507
|
#
|
|
@@ -504,7 +509,6 @@ class Gem::OptionParser
|
|
|
504
509
|
include Completion
|
|
505
510
|
end
|
|
506
511
|
|
|
507
|
-
|
|
508
512
|
#
|
|
509
513
|
# Individual switch class. Not important to the user.
|
|
510
514
|
#
|
|
@@ -546,11 +550,11 @@ class Gem::OptionParser
|
|
|
546
550
|
|
|
547
551
|
def initialize(pattern = nil, conv = nil,
|
|
548
552
|
short = nil, long = nil, arg = nil,
|
|
549
|
-
desc = ([] if short or long), block = nil, &_block)
|
|
553
|
+
desc = ([] if short or long), block = nil, values = nil, &_block)
|
|
550
554
|
raise if Array === pattern
|
|
551
555
|
block ||= _block
|
|
552
|
-
@pattern, @conv, @short, @long, @arg, @desc, @block =
|
|
553
|
-
pattern, conv, short, long, arg, desc, block
|
|
556
|
+
@pattern, @conv, @short, @long, @arg, @desc, @block, @values =
|
|
557
|
+
pattern, conv, short, long, arg, desc, block, values
|
|
554
558
|
end
|
|
555
559
|
|
|
556
560
|
#
|
|
@@ -583,11 +587,15 @@ class Gem::OptionParser
|
|
|
583
587
|
# exception.
|
|
584
588
|
#
|
|
585
589
|
def conv_arg(arg, val = []) # :nodoc:
|
|
590
|
+
v, = *val
|
|
586
591
|
if conv
|
|
587
592
|
val = conv.call(*val)
|
|
588
593
|
else
|
|
589
594
|
val = proc {|v| v}.call(*val)
|
|
590
595
|
end
|
|
596
|
+
if @values
|
|
597
|
+
@values.include?(val) or raise InvalidArgument, v
|
|
598
|
+
end
|
|
591
599
|
return arg, block, val
|
|
592
600
|
end
|
|
593
601
|
private :conv_arg
|
|
@@ -668,7 +676,7 @@ class Gem::OptionParser
|
|
|
668
676
|
|
|
669
677
|
(sopts+lopts).each do |opt|
|
|
670
678
|
# "(-x -c -r)-l[left justify]"
|
|
671
|
-
if
|
|
679
|
+
if /\A--\[no-\](.+)$/ =~ opt
|
|
672
680
|
o = $1
|
|
673
681
|
yield("--#{o}", desc.join(""))
|
|
674
682
|
yield("--no-#{o}", desc.join(""))
|
|
@@ -1032,7 +1040,6 @@ class Gem::OptionParser
|
|
|
1032
1040
|
DefaultList.short['-'] = Switch::NoArgument.new {}
|
|
1033
1041
|
DefaultList.long[''] = Switch::NoArgument.new {throw :terminate}
|
|
1034
1042
|
|
|
1035
|
-
|
|
1036
1043
|
COMPSYS_HEADER = <<'XXX' # :nodoc:
|
|
1037
1044
|
|
|
1038
1045
|
typeset -A opt_args
|
|
@@ -1051,16 +1058,16 @@ XXX
|
|
|
1051
1058
|
end
|
|
1052
1059
|
|
|
1053
1060
|
def help_exit
|
|
1054
|
-
if
|
|
1061
|
+
if $stdout.tty? && (pager = ENV.values_at(*%w[RUBY_PAGER PAGER]).find {|e| e && !e.empty?})
|
|
1055
1062
|
less = ENV["LESS"]
|
|
1056
|
-
args = [{"LESS" => "#{
|
|
1063
|
+
args = [{"LESS" => "#{less} -Fe"}, pager, "w"]
|
|
1057
1064
|
print = proc do |f|
|
|
1058
1065
|
f.puts help
|
|
1059
1066
|
rescue Errno::EPIPE
|
|
1060
1067
|
# pager terminated
|
|
1061
1068
|
end
|
|
1062
1069
|
if Process.respond_to?(:fork) and false
|
|
1063
|
-
IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call(
|
|
1070
|
+
IO.popen("-") {|f| f ? Process.exec(*args, in: f) : print.call($stdout)}
|
|
1064
1071
|
# unreachable
|
|
1065
1072
|
end
|
|
1066
1073
|
IO.popen(*args, &print)
|
|
@@ -1102,7 +1109,7 @@ XXX
|
|
|
1102
1109
|
#
|
|
1103
1110
|
Officious['*-completion-zsh'] = proc do |parser|
|
|
1104
1111
|
Switch::OptionalArgument.new do |arg|
|
|
1105
|
-
parser.compsys(
|
|
1112
|
+
parser.compsys($stdout, arg)
|
|
1106
1113
|
exit
|
|
1107
1114
|
end
|
|
1108
1115
|
end
|
|
@@ -1288,7 +1295,15 @@ XXX
|
|
|
1288
1295
|
# to $0.
|
|
1289
1296
|
#
|
|
1290
1297
|
def program_name
|
|
1291
|
-
@program_name || File.basename($0
|
|
1298
|
+
@program_name || strip_ext(File.basename($0))
|
|
1299
|
+
end
|
|
1300
|
+
|
|
1301
|
+
private def strip_ext(name) # :nodoc:
|
|
1302
|
+
exts = /#{
|
|
1303
|
+
require "rbconfig"
|
|
1304
|
+
Regexp.union(*RbConfig::CONFIG["EXECUTABLE_EXTS"]&.split(" "))
|
|
1305
|
+
}\z/o
|
|
1306
|
+
name.sub(exts, "")
|
|
1292
1307
|
end
|
|
1293
1308
|
|
|
1294
1309
|
# for experimental cascading :-)
|
|
@@ -1467,6 +1482,7 @@ XXX
|
|
|
1467
1482
|
klass = nil
|
|
1468
1483
|
q, a = nil
|
|
1469
1484
|
has_arg = false
|
|
1485
|
+
values = nil
|
|
1470
1486
|
|
|
1471
1487
|
opts.each do |o|
|
|
1472
1488
|
# argument class
|
|
@@ -1480,7 +1496,7 @@ XXX
|
|
|
1480
1496
|
end
|
|
1481
1497
|
|
|
1482
1498
|
# directly specified pattern(any object possible to match)
|
|
1483
|
-
if
|
|
1499
|
+
if !Completion.completable?(o) and o.respond_to?(:match)
|
|
1484
1500
|
pattern = notwice(o, pattern, 'pattern')
|
|
1485
1501
|
if pattern.respond_to?(:convert)
|
|
1486
1502
|
conv = pattern.method(:convert).to_proc
|
|
@@ -1494,7 +1510,12 @@ XXX
|
|
|
1494
1510
|
case o
|
|
1495
1511
|
when Proc, Method
|
|
1496
1512
|
block = notwice(o, block, 'block')
|
|
1497
|
-
when Array, Hash
|
|
1513
|
+
when Array, Hash, Set
|
|
1514
|
+
if Array === o
|
|
1515
|
+
o, v = o.partition {|v,| Completion.completable?(v)}
|
|
1516
|
+
values = notwice(v, values, 'values') unless v.empty?
|
|
1517
|
+
next if o.empty?
|
|
1518
|
+
end
|
|
1498
1519
|
case pattern
|
|
1499
1520
|
when CompletingHash
|
|
1500
1521
|
when nil
|
|
@@ -1504,11 +1525,13 @@ XXX
|
|
|
1504
1525
|
raise ArgumentError, "argument pattern given twice"
|
|
1505
1526
|
end
|
|
1506
1527
|
o.each {|pat, *v| pattern[pat] = v.fetch(0) {pat}}
|
|
1528
|
+
when Range
|
|
1529
|
+
values = notwice(o, values, 'values')
|
|
1507
1530
|
when Module
|
|
1508
1531
|
raise ArgumentError, "unsupported argument type: #{o}", ParseError.filter_backtrace(caller(4))
|
|
1509
1532
|
when *ArgumentStyle.keys
|
|
1510
1533
|
style = notwice(ArgumentStyle[o], style, 'style')
|
|
1511
|
-
when
|
|
1534
|
+
when /\A--no-([^\[\]=\s]*)(.+)?/
|
|
1512
1535
|
q, a = $1, $2
|
|
1513
1536
|
o = notwice(a ? Object : TrueClass, klass, 'type')
|
|
1514
1537
|
not_pattern, not_conv = search(:atype, o) unless not_style
|
|
@@ -1519,7 +1542,7 @@ XXX
|
|
|
1519
1542
|
(q = q.downcase).tr!('_', '-')
|
|
1520
1543
|
long << "no-#{q}"
|
|
1521
1544
|
nolong << q
|
|
1522
|
-
when
|
|
1545
|
+
when /\A--\[no-\]([^\[\]=\s]*)(.+)?/
|
|
1523
1546
|
q, a = $1, $2
|
|
1524
1547
|
o = notwice(a ? Object : TrueClass, klass, 'type')
|
|
1525
1548
|
if a
|
|
@@ -1532,7 +1555,7 @@ XXX
|
|
|
1532
1555
|
not_pattern, not_conv = search(:atype, FalseClass) unless not_style
|
|
1533
1556
|
not_style = Switch::NoArgument
|
|
1534
1557
|
nolong << "no-#{o}"
|
|
1535
|
-
when
|
|
1558
|
+
when /\A--([^\[\]=\s]*)(.+)?/
|
|
1536
1559
|
q, a = $1, $2
|
|
1537
1560
|
if a
|
|
1538
1561
|
o = notwice(NilClass, klass, 'type')
|
|
@@ -1542,7 +1565,7 @@ XXX
|
|
|
1542
1565
|
ldesc << "--#{q}"
|
|
1543
1566
|
(o = q.downcase).tr!('_', '-')
|
|
1544
1567
|
long << o
|
|
1545
|
-
when
|
|
1568
|
+
when /\A-(\[\^?\]?(?:[^\\\]]|\\.)*\])(.+)?/
|
|
1546
1569
|
q, a = $1, $2
|
|
1547
1570
|
o = notwice(Object, klass, 'type')
|
|
1548
1571
|
if a
|
|
@@ -1553,7 +1576,7 @@ XXX
|
|
|
1553
1576
|
end
|
|
1554
1577
|
sdesc << "-#{q}"
|
|
1555
1578
|
short << Regexp.new(q)
|
|
1556
|
-
when
|
|
1579
|
+
when /\A-(.)(.+)?/
|
|
1557
1580
|
q, a = $1, $2
|
|
1558
1581
|
if a
|
|
1559
1582
|
o = notwice(NilClass, klass, 'type')
|
|
@@ -1562,7 +1585,7 @@ XXX
|
|
|
1562
1585
|
end
|
|
1563
1586
|
sdesc << "-#{q}"
|
|
1564
1587
|
short << q
|
|
1565
|
-
when
|
|
1588
|
+
when /\A=/
|
|
1566
1589
|
style = notwice(default_style.guess(arg = o), style, 'style')
|
|
1567
1590
|
default_pattern, conv = search(:atype, Object) unless default_pattern
|
|
1568
1591
|
else
|
|
@@ -1571,12 +1594,18 @@ XXX
|
|
|
1571
1594
|
end
|
|
1572
1595
|
|
|
1573
1596
|
default_pattern, conv = search(:atype, default_style.pattern) unless default_pattern
|
|
1597
|
+
if Range === values and klass
|
|
1598
|
+
unless (!values.begin or klass === values.begin) and
|
|
1599
|
+
(!values.end or klass === values.end)
|
|
1600
|
+
raise ArgumentError, "range does not match class"
|
|
1601
|
+
end
|
|
1602
|
+
end
|
|
1574
1603
|
if !(short.empty? and long.empty?)
|
|
1575
1604
|
if has_arg and default_style == Switch::NoArgument
|
|
1576
1605
|
default_style = Switch::RequiredArgument
|
|
1577
1606
|
end
|
|
1578
1607
|
s = (style || default_style).new(pattern || default_pattern,
|
|
1579
|
-
conv, sdesc, ldesc, arg, desc, block)
|
|
1608
|
+
conv, sdesc, ldesc, arg, desc, block, values)
|
|
1580
1609
|
elsif !block
|
|
1581
1610
|
if style or pattern
|
|
1582
1611
|
raise ArgumentError, "no switch given", ParseError.filter_backtrace(caller)
|
|
@@ -1585,7 +1614,7 @@ XXX
|
|
|
1585
1614
|
else
|
|
1586
1615
|
short << pattern
|
|
1587
1616
|
s = (style || default_style).new(pattern,
|
|
1588
|
-
conv, nil, nil, arg, desc, block)
|
|
1617
|
+
conv, nil, nil, arg, desc, block, values)
|
|
1589
1618
|
end
|
|
1590
1619
|
return s, short, long,
|
|
1591
1620
|
(not_style.new(not_pattern, not_conv, sdesc, ldesc, nil, desc, block) if not_style),
|
|
@@ -1827,7 +1856,7 @@ XXX
|
|
|
1827
1856
|
#
|
|
1828
1857
|
def permute!(argv = default_argv, **keywords)
|
|
1829
1858
|
nonopts = []
|
|
1830
|
-
order!(argv, **keywords
|
|
1859
|
+
order!(argv, **keywords) {|nonopt| nonopts << nonopt}
|
|
1831
1860
|
argv[0, 0] = nonopts
|
|
1832
1861
|
argv
|
|
1833
1862
|
end
|
|
@@ -1880,13 +1909,16 @@ XXX
|
|
|
1880
1909
|
single_options, *long_options = *args
|
|
1881
1910
|
|
|
1882
1911
|
result = {}
|
|
1912
|
+
setter = (symbolize_names ?
|
|
1913
|
+
->(name, val) {result[name.to_sym] = val}
|
|
1914
|
+
: ->(name, val) {result[name] = val})
|
|
1883
1915
|
|
|
1884
1916
|
single_options.scan(/(.)(:)?/) do |opt, val|
|
|
1885
1917
|
if val
|
|
1886
|
-
|
|
1918
|
+
setter[opt, nil]
|
|
1887
1919
|
define("-#{opt} VAL")
|
|
1888
1920
|
else
|
|
1889
|
-
|
|
1921
|
+
setter[opt, false]
|
|
1890
1922
|
define("-#{opt}")
|
|
1891
1923
|
end
|
|
1892
1924
|
end if single_options
|
|
@@ -1895,16 +1927,16 @@ XXX
|
|
|
1895
1927
|
arg, desc = arg.split(';', 2)
|
|
1896
1928
|
opt, val = arg.split(':', 2)
|
|
1897
1929
|
if val
|
|
1898
|
-
|
|
1930
|
+
setter[opt, (val unless val.empty?)]
|
|
1899
1931
|
define("--#{opt}=#{result[opt] || "VAL"}", *[desc].compact)
|
|
1900
1932
|
else
|
|
1901
|
-
|
|
1933
|
+
setter[opt, false]
|
|
1902
1934
|
define("--#{opt}", *[desc].compact)
|
|
1903
1935
|
end
|
|
1904
1936
|
end
|
|
1905
1937
|
|
|
1906
|
-
parse_in_order(argv,
|
|
1907
|
-
|
|
1938
|
+
parse_in_order(argv, setter, **keywords)
|
|
1939
|
+
result
|
|
1908
1940
|
end
|
|
1909
1941
|
|
|
1910
1942
|
#
|
|
@@ -1954,7 +1986,7 @@ XXX
|
|
|
1954
1986
|
visit(:complete, typ, opt, icase, *pat) {|o, *sw| return sw}
|
|
1955
1987
|
}
|
|
1956
1988
|
exc = ambiguous ? AmbiguousOption : InvalidOption
|
|
1957
|
-
raise exc.new(opt, additional:
|
|
1989
|
+
raise exc.new(opt, additional: proc {|o| additional_message(typ, o)})
|
|
1958
1990
|
end
|
|
1959
1991
|
private :complete
|
|
1960
1992
|
|
|
@@ -2019,19 +2051,27 @@ XXX
|
|
|
2019
2051
|
def load(filename = nil, **keywords)
|
|
2020
2052
|
unless filename
|
|
2021
2053
|
basename = File.basename($0, '.*')
|
|
2022
|
-
return true if load(File.expand_path(
|
|
2054
|
+
return true if load(File.expand_path("~/.options/#{basename}"), **keywords) rescue nil
|
|
2023
2055
|
basename << ".options"
|
|
2056
|
+
if !(xdg = ENV['XDG_CONFIG_HOME']) or xdg.empty?
|
|
2057
|
+
# https://specifications.freedesktop.org/basedir-spec/latest/#variables
|
|
2058
|
+
#
|
|
2059
|
+
# If $XDG_CONFIG_HOME is either not set or empty, a default
|
|
2060
|
+
# equal to $HOME/.config should be used.
|
|
2061
|
+
xdg = ['~/.config', true]
|
|
2062
|
+
end
|
|
2024
2063
|
return [
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
'~/.config',
|
|
2064
|
+
xdg,
|
|
2065
|
+
|
|
2028
2066
|
*ENV['XDG_CONFIG_DIRS']&.split(File::PATH_SEPARATOR),
|
|
2029
2067
|
|
|
2030
2068
|
# Haiku
|
|
2031
|
-
'~/config/settings',
|
|
2032
|
-
].any? {|dir|
|
|
2069
|
+
['~/config/settings', true],
|
|
2070
|
+
].any? {|dir, expand|
|
|
2033
2071
|
next if !dir or dir.empty?
|
|
2034
|
-
|
|
2072
|
+
filename = File.join(dir, basename)
|
|
2073
|
+
filename = File.expand_path(filename) if expand
|
|
2074
|
+
load(filename, **keywords) rescue nil
|
|
2035
2075
|
}
|
|
2036
2076
|
end
|
|
2037
2077
|
begin
|
|
@@ -2237,9 +2277,10 @@ XXX
|
|
|
2237
2277
|
argv
|
|
2238
2278
|
end
|
|
2239
2279
|
|
|
2280
|
+
DIR = File.join(__dir__, '')
|
|
2240
2281
|
def self.filter_backtrace(array)
|
|
2241
2282
|
unless $DEBUG
|
|
2242
|
-
array.delete_if
|
|
2283
|
+
array.delete_if {|bt| bt.start_with?(DIR)}
|
|
2243
2284
|
end
|
|
2244
2285
|
array
|
|
2245
2286
|
end
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
module Gem::Timeout
|
|
22
22
|
# The version
|
|
23
|
-
VERSION = "0.4.
|
|
23
|
+
VERSION = "0.4.4"
|
|
24
24
|
|
|
25
25
|
# Internal error raised to when a timeout is triggered.
|
|
26
26
|
class ExitException < Exception
|
|
@@ -123,6 +123,9 @@ module Gem::Timeout
|
|
|
123
123
|
|
|
124
124
|
def self.ensure_timeout_thread_created
|
|
125
125
|
unless @timeout_thread and @timeout_thread.alive?
|
|
126
|
+
# If the Mutex is already owned we are in a signal handler.
|
|
127
|
+
# In that case, just return and let the main thread create the @timeout_thread.
|
|
128
|
+
return if TIMEOUT_THREAD_MUTEX.owned?
|
|
126
129
|
TIMEOUT_THREAD_MUTEX.synchronize do
|
|
127
130
|
unless @timeout_thread and @timeout_thread.alive?
|
|
128
131
|
@timeout_thread = create_timeout_thread
|
|
@@ -30,6 +30,9 @@ module Gem::URI
|
|
|
30
30
|
remove_const(:Parser) if defined?(::Gem::URI::Parser)
|
|
31
31
|
const_set("Parser", parser.class)
|
|
32
32
|
|
|
33
|
+
remove_const(:PARSER) if defined?(::Gem::URI::PARSER)
|
|
34
|
+
const_set("PARSER", parser)
|
|
35
|
+
|
|
33
36
|
remove_const(:REGEXP) if defined?(::Gem::URI::REGEXP)
|
|
34
37
|
remove_const(:PATTERN) if defined?(::Gem::URI::PATTERN)
|
|
35
38
|
if Parser == RFC2396_Parser
|
|
@@ -49,10 +52,10 @@ module Gem::URI
|
|
|
49
52
|
warn "Gem::URI::REGEXP is obsolete. Use Gem::URI::RFC2396_REGEXP explicitly.", uplevel: 1 if $VERBOSE
|
|
50
53
|
Gem::URI::RFC2396_REGEXP
|
|
51
54
|
elsif value = RFC2396_PARSER.regexp[const]
|
|
52
|
-
warn "Gem::URI::#{const} is obsolete. Use RFC2396_PARSER.regexp[#{const.inspect}] explicitly.", uplevel: 1 if $VERBOSE
|
|
55
|
+
warn "Gem::URI::#{const} is obsolete. Use Gem::URI::RFC2396_PARSER.regexp[#{const.inspect}] explicitly.", uplevel: 1 if $VERBOSE
|
|
53
56
|
value
|
|
54
57
|
elsif value = RFC2396_Parser.const_get(const)
|
|
55
|
-
warn "Gem::URI::#{const} is obsolete. Use RFC2396_Parser::#{const} explicitly.", uplevel: 1 if $VERBOSE
|
|
58
|
+
warn "Gem::URI::#{const} is obsolete. Use Gem::URI::RFC2396_Parser::#{const} explicitly.", uplevel: 1 if $VERBOSE
|
|
56
59
|
value
|
|
57
60
|
else
|
|
58
61
|
super
|
|
@@ -92,6 +95,40 @@ module Gem::URI
|
|
|
92
95
|
end
|
|
93
96
|
|
|
94
97
|
module Schemes # :nodoc:
|
|
98
|
+
class << self
|
|
99
|
+
ReservedChars = ".+-"
|
|
100
|
+
EscapedChars = "\u01C0\u01C1\u01C2"
|
|
101
|
+
# Use Lo category chars as escaped chars for TruffleRuby, which
|
|
102
|
+
# does not allow Symbol categories as identifiers.
|
|
103
|
+
|
|
104
|
+
def escape(name)
|
|
105
|
+
unless name and name.ascii_only?
|
|
106
|
+
return nil
|
|
107
|
+
end
|
|
108
|
+
name.upcase.tr(ReservedChars, EscapedChars)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def unescape(name)
|
|
112
|
+
name.tr(EscapedChars, ReservedChars).encode(Encoding::US_ASCII).upcase
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def find(name)
|
|
116
|
+
const_get(name, false) if name and const_defined?(name, false)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def register(name, klass)
|
|
120
|
+
unless scheme = escape(name)
|
|
121
|
+
raise ArgumentError, "invalid character as scheme - #{name}"
|
|
122
|
+
end
|
|
123
|
+
const_set(scheme, klass)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def list
|
|
127
|
+
constants.map { |name|
|
|
128
|
+
[unescape(name.to_s), const_get(name)]
|
|
129
|
+
}.to_h
|
|
130
|
+
end
|
|
131
|
+
end
|
|
95
132
|
end
|
|
96
133
|
private_constant :Schemes
|
|
97
134
|
|
|
@@ -104,7 +141,7 @@ module Gem::URI
|
|
|
104
141
|
# Note that after calling String#upcase on +scheme+, it must be a valid
|
|
105
142
|
# constant name.
|
|
106
143
|
def self.register_scheme(scheme, klass)
|
|
107
|
-
Schemes.
|
|
144
|
+
Schemes.register(scheme, klass)
|
|
108
145
|
end
|
|
109
146
|
|
|
110
147
|
# Returns a hash of the defined schemes:
|
|
@@ -122,14 +159,14 @@ module Gem::URI
|
|
|
122
159
|
#
|
|
123
160
|
# Related: Gem::URI.register_scheme.
|
|
124
161
|
def self.scheme_list
|
|
125
|
-
Schemes.
|
|
126
|
-
[name.to_s.upcase, Schemes.const_get(name)]
|
|
127
|
-
}.to_h
|
|
162
|
+
Schemes.list
|
|
128
163
|
end
|
|
129
164
|
|
|
165
|
+
# :stopdoc:
|
|
130
166
|
INITIAL_SCHEMES = scheme_list
|
|
131
167
|
private_constant :INITIAL_SCHEMES
|
|
132
168
|
Ractor.make_shareable(INITIAL_SCHEMES) if defined?(Ractor)
|
|
169
|
+
# :startdoc:
|
|
133
170
|
|
|
134
171
|
# Returns a new object constructed from the given +scheme+, +arguments+,
|
|
135
172
|
# and +default+:
|
|
@@ -148,12 +185,10 @@ module Gem::URI
|
|
|
148
185
|
# # => #<Gem::URI::HTTP foo://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
|
|
149
186
|
#
|
|
150
187
|
def self.for(scheme, *arguments, default: Generic)
|
|
151
|
-
const_name = scheme
|
|
188
|
+
const_name = Schemes.escape(scheme)
|
|
152
189
|
|
|
153
190
|
uri_class = INITIAL_SCHEMES[const_name]
|
|
154
|
-
uri_class ||=
|
|
155
|
-
Schemes.const_get(const_name, false)
|
|
156
|
-
end
|
|
191
|
+
uri_class ||= Schemes.find(const_name)
|
|
157
192
|
uri_class ||= default
|
|
158
193
|
|
|
159
194
|
return uri_class.new(scheme, *arguments)
|
|
@@ -195,7 +230,7 @@ module Gem::URI
|
|
|
195
230
|
# ["fragment", "top"]]
|
|
196
231
|
#
|
|
197
232
|
def self.split(uri)
|
|
198
|
-
|
|
233
|
+
PARSER.split(uri)
|
|
199
234
|
end
|
|
200
235
|
|
|
201
236
|
# Returns a new \Gem::URI object constructed from the given string +uri+:
|
|
@@ -205,11 +240,11 @@ module Gem::URI
|
|
|
205
240
|
# Gem::URI.parse('http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top')
|
|
206
241
|
# # => #<Gem::URI::HTTP http://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top>
|
|
207
242
|
#
|
|
208
|
-
# It's recommended to first ::escape string +uri+
|
|
243
|
+
# It's recommended to first Gem::URI::RFC2396_PARSER.escape string +uri+
|
|
209
244
|
# if it may contain invalid Gem::URI characters.
|
|
210
245
|
#
|
|
211
246
|
def self.parse(uri)
|
|
212
|
-
|
|
247
|
+
PARSER.parse(uri)
|
|
213
248
|
end
|
|
214
249
|
|
|
215
250
|
# Merges the given Gem::URI strings +str+
|
|
@@ -265,7 +300,7 @@ module Gem::URI
|
|
|
265
300
|
#
|
|
266
301
|
def self.extract(str, schemes = nil, &block) # :nodoc:
|
|
267
302
|
warn "Gem::URI.extract is obsolete", uplevel: 1 if $VERBOSE
|
|
268
|
-
|
|
303
|
+
PARSER.extract(str, schemes, &block)
|
|
269
304
|
end
|
|
270
305
|
|
|
271
306
|
#
|
|
@@ -302,7 +337,7 @@ module Gem::URI
|
|
|
302
337
|
#
|
|
303
338
|
def self.regexp(schemes = nil)# :nodoc:
|
|
304
339
|
warn "Gem::URI.regexp is obsolete", uplevel: 1 if $VERBOSE
|
|
305
|
-
|
|
340
|
+
PARSER.make_regexp(schemes)
|
|
306
341
|
end
|
|
307
342
|
|
|
308
343
|
TBLENCWWWCOMP_ = {} # :nodoc:
|
|
@@ -407,6 +442,8 @@ module Gem::URI
|
|
|
407
442
|
_decode_uri_component(/%\h\h/, str, enc)
|
|
408
443
|
end
|
|
409
444
|
|
|
445
|
+
# Returns a string derived from the given string +str+ with
|
|
446
|
+
# Gem::URI-encoded characters matching +regexp+ according to +table+.
|
|
410
447
|
def self._encode_uri_component(regexp, table, str, enc)
|
|
411
448
|
str = str.to_s.dup
|
|
412
449
|
if str.encoding != Encoding::ASCII_8BIT
|
|
@@ -421,6 +458,8 @@ module Gem::URI
|
|
|
421
458
|
end
|
|
422
459
|
private_class_method :_encode_uri_component
|
|
423
460
|
|
|
461
|
+
# Returns a string decoding characters matching +regexp+ from the
|
|
462
|
+
# given \URL-encoded string +str+.
|
|
424
463
|
def self._decode_uri_component(regexp, str, enc)
|
|
425
464
|
raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/.match?(str)
|
|
426
465
|
str.b.gsub(regexp, TBLDECWWWCOMP_).force_encoding(enc)
|
|
@@ -859,6 +898,7 @@ module Gem
|
|
|
859
898
|
# Returns a \Gem::URI object derived from the given +uri+,
|
|
860
899
|
# which may be a \Gem::URI string or an existing \Gem::URI object:
|
|
861
900
|
#
|
|
901
|
+
# require 'rubygems/vendor/uri/lib/uri'
|
|
862
902
|
# # Returns a new Gem::URI.
|
|
863
903
|
# uri = Gem::URI('http://github.com/ruby/ruby')
|
|
864
904
|
# # => #<Gem::URI::HTTP http://github.com/ruby/ruby>
|
|
@@ -866,6 +906,8 @@ module Gem
|
|
|
866
906
|
# Gem::URI(uri)
|
|
867
907
|
# # => #<Gem::URI::HTTP http://github.com/ruby/ruby>
|
|
868
908
|
#
|
|
909
|
+
# You must require 'rubygems/vendor/uri/lib/uri' to use this method.
|
|
910
|
+
#
|
|
869
911
|
def URI(uri)
|
|
870
912
|
if uri.is_a?(Gem::URI::Generic)
|
|
871
913
|
uri
|
|
@@ -47,7 +47,7 @@ module Gem::URI
|
|
|
47
47
|
# :path => '/ruby/src'})
|
|
48
48
|
# uri2.to_s # => "file://host.example.com/ruby/src"
|
|
49
49
|
#
|
|
50
|
-
# uri3 = Gem::URI::File.build({:path => Gem::URI::escape('/path/my file.txt')})
|
|
50
|
+
# uri3 = Gem::URI::File.build({:path => Gem::URI::RFC2396_PARSER.escape('/path/my file.txt')})
|
|
51
51
|
# uri3.to_s # => "file:///path/my%20file.txt"
|
|
52
52
|
#
|
|
53
53
|
def self.build(args)
|