rubygems-update 3.2.30 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +163 -4
- data/CONTRIBUTING.md +40 -10
- data/Manifest.txt +28 -5
- data/POLICIES.md +22 -8
- data/README.md +9 -7
- data/UPGRADING.md +5 -81
- data/bin/gem +1 -6
- data/bundler/CHANGELOG.md +86 -0
- data/bundler/exe/bundle +7 -8
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/doctor.rb +3 -2
- data/bundler/lib/bundler/cli/gem.rb +70 -8
- data/bundler/lib/bundler/cli/info.rb +6 -1
- data/bundler/lib/bundler/cli/install.rb +2 -0
- data/bundler/lib/bundler/cli/update.rb +2 -2
- data/bundler/lib/bundler/cli.rb +9 -1
- data/bundler/lib/bundler/compact_index_client/updater.rb +0 -5
- data/bundler/lib/bundler/definition.rb +66 -120
- data/bundler/lib/bundler/dependency.rb +5 -7
- data/bundler/lib/bundler/dsl.rb +18 -30
- data/bundler/lib/bundler/endpoint_specification.rb +0 -8
- data/bundler/lib/bundler/environment_preserver.rb +4 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +9 -4
- data/bundler/lib/bundler/fetcher.rb +2 -5
- data/bundler/lib/bundler/gem_helper.rb +2 -2
- data/bundler/lib/bundler/injector.rb +10 -1
- data/bundler/lib/bundler/installer/gem_installer.rb +1 -6
- data/bundler/lib/bundler/installer.rb +1 -4
- data/bundler/lib/bundler/lazy_specification.rb +17 -1
- data/bundler/lib/bundler/lockfile_parser.rb +10 -12
- data/bundler/lib/bundler/man/bundle-add.1 +10 -2
- data/bundler/lib/bundler/man/bundle-add.1.ronn +7 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +5 -5
- data/bundler/lib/bundler/man/bundle-config.1.ronn +5 -5
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +14 -1
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +16 -0
- 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-inject.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +2 -2
- data/bundler/lib/bundler/man/bundle-install.1.ronn +2 -2
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- 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-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +2 -2
- data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -1
- data/bundler/lib/bundler/man/gemfile.5 +28 -2
- data/bundler/lib/bundler/man/gemfile.5.ronn +9 -1
- data/bundler/lib/bundler/plugin/api/source.rb +1 -0
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/psyched_yaml.rb +1 -13
- data/bundler/lib/bundler/resolver.rb +34 -31
- data/bundler/lib/bundler/rubygems_ext.rb +2 -0
- data/bundler/lib/bundler/rubygems_integration.rb +11 -48
- data/bundler/lib/bundler/runtime.rb +1 -1
- data/bundler/lib/bundler/self_manager.rb +73 -0
- data/bundler/lib/bundler/shared_helpers.rb +4 -12
- data/bundler/lib/bundler/source/git/git_proxy.rb +7 -4
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +17 -13
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +1 -1
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +7 -29
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +1 -1
- data/bundler/lib/bundler/templates/Gemfile +0 -2
- data/bundler/lib/bundler/templates/gems.rb +0 -3
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +5 -2
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +15 -2
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +2 -2
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +13 -13
- data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/bundler/lib/bundler/ui/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/.document +1 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +453 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +17 -80
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +5 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +1 -14
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +1 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +84 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -1
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +9 -3
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/command.rb +4 -4
- data/lib/rubygems/command_manager.rb +4 -2
- data/lib/rubygems/commands/cert_command.rb +6 -6
- data/lib/rubygems/commands/fetch_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +5 -2
- data/lib/rubygems/commands/pristine_command.rb +8 -2
- data/lib/rubygems/commands/server_command.rb +14 -77
- data/lib/rubygems/commands/setup_command.rb +84 -76
- data/lib/rubygems/commands/uninstall_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +10 -5
- data/lib/rubygems/defaults.rb +2 -20
- data/lib/rubygems/dependency_list.rb +2 -2
- data/lib/rubygems/deprecate.rb +53 -6
- data/lib/rubygems/exceptions.rb +27 -1
- data/lib/rubygems/ext/builder.rb +11 -8
- data/lib/rubygems/ext/cmake_builder.rb +1 -1
- data/lib/rubygems/install_update_options.rb +13 -4
- data/lib/rubygems/installer.rb +46 -27
- data/lib/rubygems/local_remote_options.rb +3 -3
- data/lib/rubygems/name_tuple.rb +2 -3
- data/lib/rubygems/optparse/.document +1 -0
- data/lib/rubygems/optparse/COPYING +56 -0
- data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
- data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
- data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
- data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
- data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
- data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
- data/lib/rubygems/optparse/lib/optparse.rb +2230 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/path_support.rb +1 -6
- data/lib/rubygems/platform.rb +4 -0
- data/lib/rubygems/remote_fetcher.rb +1 -1
- data/lib/rubygems/request_set.rb +2 -2
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/installer_set.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/security.rb +4 -3
- data/lib/rubygems/security_option.rb +3 -3
- data/lib/rubygems/source.rb +3 -1
- data/lib/rubygems/spec_fetcher.rb +1 -1
- data/lib/rubygems/specification.rb +46 -46
- data/lib/rubygems/text.rb +21 -20
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +454 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +4 -1
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/util/licenses.rb +2 -0
- data/lib/rubygems/version.rb +2 -0
- data/lib/rubygems/version_option.rb +2 -2
- data/lib/rubygems.rb +13 -10
- data/rubygems-update.gemspec +1 -1
- data/setup.rb +1 -6
- data/test/rubygems/encrypted_private_key.pem +26 -26
- data/test/rubygems/helper.rb +48 -38
- data/test/rubygems/test_config.rb +2 -2
- data/test/rubygems/test_exit.rb +11 -0
- data/test/rubygems/test_gem.rb +46 -41
- data/test/rubygems/test_gem_command.rb +1 -1
- data/test/rubygems/test_gem_command_manager.rb +28 -2
- data/test/rubygems/test_gem_commands_cert_command.rb +8 -8
- data/test/rubygems/test_gem_commands_fetch_command.rb +36 -0
- data/test/rubygems/test_gem_commands_open_command.rb +1 -1
- data/test/rubygems/test_gem_commands_server_command.rb +4 -46
- data/test/rubygems/test_gem_commands_setup_command.rb +67 -19
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_commands_update_command.rb +2 -2
- data/test/rubygems/test_gem_commands_yank_command.rb +1 -1
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +7 -3
- data/test/rubygems/test_gem_install_update_options.rb +2 -2
- data/test/rubygems/test_gem_installer.rb +37 -5
- data/test/rubygems/test_gem_path_support.rb +2 -6
- data/test/rubygems/test_gem_remote_fetcher.rb +15 -0
- data/test/rubygems/test_gem_request.rb +10 -4
- data/test/rubygems/test_gem_requirement.rb +0 -1
- data/test/rubygems/test_gem_resolver.rb +7 -7
- data/test/rubygems/test_gem_security.rb +1 -1
- data/test/rubygems/test_gem_specification.rb +27 -25
- data/test/rubygems/test_gem_text.rb +6 -0
- data/test/rubygems/test_project_sanity.rb +1 -1
- data/test/rubygems/test_require.rb +8 -35
- data/test/rubygems/test_rubygems.rb +23 -0
- metadata +31 -8
- data/bundler/lib/bundler/gemdeps.rb +0 -29
- data/lib/rubygems/server.rb +0 -882
- data/test/rubygems/bogussources.rb +0 -9
- data/test/rubygems/test_gem_server.rb +0 -608
@@ -51,7 +51,7 @@ module Gem::InstallUpdateOptions
|
|
51
51
|
'Install gem into the vendor directory.',
|
52
52
|
'Only for use by gem repackagers.') do |value, options|
|
53
53
|
unless Gem.vendor_dir
|
54
|
-
raise OptionParser::InvalidOption.new 'your platform is not supported'
|
54
|
+
raise Gem::OptionParser::InvalidOption.new 'your platform is not supported'
|
55
55
|
end
|
56
56
|
|
57
57
|
options[:vendor] = true
|
@@ -143,7 +143,7 @@ module Gem::InstallUpdateOptions
|
|
143
143
|
unless v
|
144
144
|
message = v ? v : "(tried #{Gem::GEM_DEP_FILES.join ', '})"
|
145
145
|
|
146
|
-
raise OptionParser::InvalidArgument,
|
146
|
+
raise Gem::OptionParser::InvalidArgument,
|
147
147
|
"cannot find gem dependencies file #{message}"
|
148
148
|
end
|
149
149
|
|
@@ -181,10 +181,19 @@ module Gem::InstallUpdateOptions
|
|
181
181
|
end
|
182
182
|
|
183
183
|
##
|
184
|
-
# Default options for the gem install
|
184
|
+
# Default options for the gem install and update commands.
|
185
|
+
|
186
|
+
def install_update_options
|
187
|
+
{
|
188
|
+
:document => %w[ri],
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
##
|
193
|
+
# Default description for the gem install and update commands.
|
185
194
|
|
186
195
|
def install_update_defaults_str
|
187
|
-
'--document=
|
196
|
+
'--document=ri'
|
188
197
|
end
|
189
198
|
|
190
199
|
end
|
data/lib/rubygems/installer.rb
CHANGED
@@ -5,7 +5,6 @@
|
|
5
5
|
# See LICENSE.txt for permissions.
|
6
6
|
#++
|
7
7
|
|
8
|
-
require_relative 'command'
|
9
8
|
require_relative 'installer_uninstaller_utils'
|
10
9
|
require_relative 'exceptions'
|
11
10
|
require_relative 'deprecate'
|
@@ -68,19 +67,28 @@ class Gem::Installer
|
|
68
67
|
|
69
68
|
@path_warning = false
|
70
69
|
|
71
|
-
@install_lock = Thread::Mutex.new
|
72
|
-
|
73
70
|
class << self
|
74
|
-
|
75
|
-
#
|
71
|
+
#
|
72
|
+
# Changes in rubygems to lazily loading `rubygems/command` (in order to
|
73
|
+
# lazily load `optparse` as a side effect) affect bundler's custom installer
|
74
|
+
# which uses `Gem::Command` without requiring it (up until bundler 2.2.29).
|
75
|
+
# This hook is to compensate for that missing require.
|
76
|
+
#
|
77
|
+
# TODO: Remove when rubygems no longer supports running on bundler older
|
78
|
+
# than 2.2.29.
|
76
79
|
|
77
|
-
|
80
|
+
def inherited(klass)
|
81
|
+
if klass.name == "Bundler::RubyGemsGemInstaller"
|
82
|
+
require "rubygems/command"
|
83
|
+
end
|
84
|
+
|
85
|
+
super(klass)
|
86
|
+
end
|
78
87
|
|
79
88
|
##
|
80
|
-
#
|
81
|
-
# used to allow multiple threads to install Gems at the same time.
|
89
|
+
# True if we've warned about PATH not including Gem.bindir
|
82
90
|
|
83
|
-
|
91
|
+
attr_accessor :path_warning
|
84
92
|
|
85
93
|
##
|
86
94
|
# Overrides the executable format.
|
@@ -285,8 +293,6 @@ class Gem::Installer
|
|
285
293
|
def install
|
286
294
|
pre_install_checks
|
287
295
|
|
288
|
-
FileUtils.rm_f File.join gem_home, 'specifications', spec.spec_name
|
289
|
-
|
290
296
|
run_pre_install_hooks
|
291
297
|
|
292
298
|
# Set loaded_from to ensure extension_dir is correct
|
@@ -326,7 +332,7 @@ class Gem::Installer
|
|
326
332
|
|
327
333
|
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
328
334
|
|
329
|
-
Gem::
|
335
|
+
Gem::Specification.reset
|
330
336
|
|
331
337
|
run_post_install_hooks
|
332
338
|
|
@@ -440,13 +446,9 @@ class Gem::Installer
|
|
440
446
|
# specifications directory.
|
441
447
|
|
442
448
|
def write_spec
|
443
|
-
|
444
|
-
spec.installed_by_version = Gem.rubygems_version
|
449
|
+
spec.installed_by_version = Gem.rubygems_version
|
445
450
|
|
446
|
-
|
447
|
-
|
448
|
-
file.fsync rescue nil # for filesystems without fsync(2)
|
449
|
-
end
|
451
|
+
Gem.write_binary(spec_file, spec.to_ruby_for_cache)
|
450
452
|
end
|
451
453
|
|
452
454
|
##
|
@@ -454,9 +456,7 @@ class Gem::Installer
|
|
454
456
|
# specifications/default directory.
|
455
457
|
|
456
458
|
def write_default_spec
|
457
|
-
|
458
|
-
file.puts spec.to_ruby
|
459
|
-
end
|
459
|
+
Gem.write_binary(default_spec_file, spec.to_ruby)
|
460
460
|
end
|
461
461
|
|
462
462
|
##
|
@@ -511,7 +511,7 @@ class Gem::Installer
|
|
511
511
|
end
|
512
512
|
|
513
513
|
def generate_plugins # :nodoc:
|
514
|
-
latest = Gem::
|
514
|
+
latest = Gem::Specification.latest_spec_for(spec.name)
|
515
515
|
return if latest && latest.version > spec.version
|
516
516
|
|
517
517
|
ensure_writable_dir @plugins_dir
|
@@ -676,7 +676,7 @@ class Gem::Installer
|
|
676
676
|
@development = options[:development]
|
677
677
|
@build_root = options[:build_root]
|
678
678
|
|
679
|
-
@build_args = options[:build_args]
|
679
|
+
@build_args = options[:build_args]
|
680
680
|
|
681
681
|
unless @build_root.nil?
|
682
682
|
@bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ''))
|
@@ -768,7 +768,7 @@ str = ARGV.first
|
|
768
768
|
if str
|
769
769
|
str = str.b[/\\A_(.*)_\\z/, 1]
|
770
770
|
if str and Gem::Version.correct?(str)
|
771
|
-
|
771
|
+
#{explicit_version_requirement(spec.name)}
|
772
772
|
ARGV.shift
|
773
773
|
end
|
774
774
|
end
|
@@ -791,6 +791,16 @@ Gem.use_gemdeps
|
|
791
791
|
TEXT
|
792
792
|
end
|
793
793
|
|
794
|
+
def explicit_version_requirement(name)
|
795
|
+
code = "version = str"
|
796
|
+
return code unless name == "bundler"
|
797
|
+
|
798
|
+
code += <<-TEXT
|
799
|
+
|
800
|
+
ENV['BUNDLER_VERSION'] = str
|
801
|
+
TEXT
|
802
|
+
end
|
803
|
+
|
794
804
|
##
|
795
805
|
# return the stub script text used to launch the true Ruby script
|
796
806
|
|
@@ -832,7 +842,7 @@ TEXT
|
|
832
842
|
# configure scripts and rakefiles or mkrf_conf files.
|
833
843
|
|
834
844
|
def build_extensions
|
835
|
-
builder = Gem::Ext::Builder.new spec,
|
845
|
+
builder = Gem::Ext::Builder.new spec, build_args
|
836
846
|
|
837
847
|
builder.build_extensions
|
838
848
|
end
|
@@ -919,7 +929,7 @@ TEXT
|
|
919
929
|
# extensions.
|
920
930
|
|
921
931
|
def write_build_info_file
|
922
|
-
return if
|
932
|
+
return if build_args.empty?
|
923
933
|
|
924
934
|
build_info_dir = File.join gem_home, 'build_info'
|
925
935
|
|
@@ -929,7 +939,7 @@ TEXT
|
|
929
939
|
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
930
940
|
|
931
941
|
File.open build_info_file, 'w' do |io|
|
932
|
-
|
942
|
+
build_args.each do |arg|
|
933
943
|
io.puts arg
|
934
944
|
end
|
935
945
|
end
|
@@ -954,4 +964,13 @@ TEXT
|
|
954
964
|
|
955
965
|
raise Gem::FilePermissionError.new(dir) unless File.writable? dir
|
956
966
|
end
|
967
|
+
|
968
|
+
private
|
969
|
+
|
970
|
+
def build_args
|
971
|
+
@build_args ||= begin
|
972
|
+
require_relative "command"
|
973
|
+
Gem::Command.build_args
|
974
|
+
end
|
975
|
+
end
|
957
976
|
end
|
@@ -14,14 +14,14 @@ require_relative '../rubygems'
|
|
14
14
|
module Gem::LocalRemoteOptions
|
15
15
|
|
16
16
|
##
|
17
|
-
# Allows OptionParser to handle HTTP URIs.
|
17
|
+
# Allows Gem::OptionParser to handle HTTP URIs.
|
18
18
|
|
19
19
|
def accept_uri_http
|
20
|
-
OptionParser.accept URI::HTTP do |value|
|
20
|
+
Gem::OptionParser.accept URI::HTTP do |value|
|
21
21
|
begin
|
22
22
|
uri = URI.parse value
|
23
23
|
rescue URI::InvalidURIError
|
24
|
-
raise OptionParser::InvalidArgument, value
|
24
|
+
raise Gem::OptionParser::InvalidArgument, value
|
25
25
|
end
|
26
26
|
|
27
27
|
valid_uri_schemes = ["http", "https", "file", "s3"]
|
data/lib/rubygems/name_tuple.rb
CHANGED
@@ -89,9 +89,8 @@ class Gem::NameTuple
|
|
89
89
|
alias to_s inspect # :nodoc:
|
90
90
|
|
91
91
|
def <=>(other)
|
92
|
-
[@name, @version,
|
93
|
-
[other.name, other.version,
|
94
|
-
other.platform == Gem::Platform::RUBY ? -1 : 1]
|
92
|
+
[@name, @version, Gem::Platform.sort_priority(@platform)] <=>
|
93
|
+
[other.name, other.version, Gem::Platform.sort_priority(other.platform)]
|
95
94
|
end
|
96
95
|
|
97
96
|
include Comparable
|
@@ -0,0 +1 @@
|
|
1
|
+
# Vendored files do not need to be documented
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a. place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b. use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c. give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d. make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a. distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b. accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c. give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d. make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
require 'rubygems/optparse/lib/optparse'
|
3
|
+
|
4
|
+
class Gem::OptionParser::AC < Gem::OptionParser
|
5
|
+
private
|
6
|
+
|
7
|
+
def _check_ac_args(name, block)
|
8
|
+
unless /\A\w[-\w]*\z/ =~ name
|
9
|
+
raise ArgumentError, name
|
10
|
+
end
|
11
|
+
unless block
|
12
|
+
raise ArgumentError, "no block given", ParseError.filter_backtrace(caller)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ARG_CONV = proc {|val| val.nil? ? true : val}
|
17
|
+
|
18
|
+
def _ac_arg_enable(prefix, name, help_string, block)
|
19
|
+
_check_ac_args(name, block)
|
20
|
+
|
21
|
+
sdesc = []
|
22
|
+
ldesc = ["--#{prefix}-#{name}"]
|
23
|
+
desc = [help_string]
|
24
|
+
q = name.downcase
|
25
|
+
ac_block = proc {|val| block.call(ARG_CONV.call(val))}
|
26
|
+
enable = Switch::PlacedArgument.new(nil, ARG_CONV, sdesc, ldesc, nil, desc, ac_block)
|
27
|
+
disable = Switch::NoArgument.new(nil, proc {false}, sdesc, ldesc, nil, desc, ac_block)
|
28
|
+
top.append(enable, [], ["enable-" + q], disable, ['disable-' + q])
|
29
|
+
enable
|
30
|
+
end
|
31
|
+
|
32
|
+
public
|
33
|
+
|
34
|
+
def ac_arg_enable(name, help_string, &block)
|
35
|
+
_ac_arg_enable("enable", name, help_string, block)
|
36
|
+
end
|
37
|
+
|
38
|
+
def ac_arg_disable(name, help_string, &block)
|
39
|
+
_ac_arg_enable("disable", name, help_string, block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def ac_arg_with(name, help_string, &block)
|
43
|
+
_check_ac_args(name, block)
|
44
|
+
|
45
|
+
sdesc = []
|
46
|
+
ldesc = ["--with-#{name}"]
|
47
|
+
desc = [help_string]
|
48
|
+
q = name.downcase
|
49
|
+
with = Switch::PlacedArgument.new(*search(:atype, String), sdesc, ldesc, nil, desc, block)
|
50
|
+
without = Switch::NoArgument.new(nil, proc {}, sdesc, ldesc, nil, desc, block)
|
51
|
+
top.append(with, [], ["with-" + q], without, ['without-' + q])
|
52
|
+
with
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
require 'rubygems/optparse/lib/optparse'
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
Gem::OptionParser.accept(DateTime) do |s,|
|
6
|
+
begin
|
7
|
+
DateTime.parse(s) if s
|
8
|
+
rescue ArgumentError
|
9
|
+
raise Gem::OptionParser::InvalidArgument, s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
Gem::OptionParser.accept(Date) do |s,|
|
13
|
+
begin
|
14
|
+
Date.parse(s) if s
|
15
|
+
rescue ArgumentError
|
16
|
+
raise Gem::OptionParser::InvalidArgument, s
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rubygems/optparse/lib/optparse'
|
3
|
+
|
4
|
+
class Gem::OptionParser
|
5
|
+
# :call-seq:
|
6
|
+
# define_by_keywords(options, method, **params)
|
7
|
+
#
|
8
|
+
# :include: ../../doc/optparse/creates_option.rdoc
|
9
|
+
#
|
10
|
+
def define_by_keywords(options, meth, **opts)
|
11
|
+
meth.parameters.each do |type, name|
|
12
|
+
case type
|
13
|
+
when :key, :keyreq
|
14
|
+
op, cl = *(type == :key ? %w"[ ]" : ["", ""])
|
15
|
+
define("--#{name}=#{op}#{name.upcase}#{cl}", *opts[name]) do |o|
|
16
|
+
options[name] = o
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
options
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: false
|
2
|
+
# Gem::OptionParser internal utility
|
3
|
+
|
4
|
+
class << Gem::OptionParser
|
5
|
+
def show_version(*pkgs)
|
6
|
+
progname = ARGV.options.program_name
|
7
|
+
result = false
|
8
|
+
show = proc do |klass, cname, version|
|
9
|
+
str = "#{progname}"
|
10
|
+
unless klass == ::Object and cname == :VERSION
|
11
|
+
version = version.join(".") if Array === version
|
12
|
+
str << ": #{klass}" unless klass == Object
|
13
|
+
str << " version #{version}"
|
14
|
+
end
|
15
|
+
[:Release, :RELEASE].find do |rel|
|
16
|
+
if klass.const_defined?(rel)
|
17
|
+
str << " (#{klass.const_get(rel)})"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
puts str
|
21
|
+
result = true
|
22
|
+
end
|
23
|
+
if pkgs.size == 1 and pkgs[0] == "all"
|
24
|
+
self.search_const(::Object, /\AV(?:ERSION|ersion)\z/) do |klass, cname, version|
|
25
|
+
unless cname[1] == ?e and klass.const_defined?(:Version)
|
26
|
+
show.call(klass, cname.intern, version)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
pkgs.each do |pkg|
|
31
|
+
begin
|
32
|
+
pkg = pkg.split(/::|\//).inject(::Object) {|m, c| m.const_get(c)}
|
33
|
+
v = case
|
34
|
+
when pkg.const_defined?(:Version)
|
35
|
+
pkg.const_get(n = :Version)
|
36
|
+
when pkg.const_defined?(:VERSION)
|
37
|
+
pkg.const_get(n = :VERSION)
|
38
|
+
else
|
39
|
+
n = nil
|
40
|
+
"unknown"
|
41
|
+
end
|
42
|
+
show.call(pkg, n, v)
|
43
|
+
rescue NameError
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
result
|
48
|
+
end
|
49
|
+
|
50
|
+
def each_const(path, base = ::Object)
|
51
|
+
path.split(/::|\//).inject(base) do |klass, name|
|
52
|
+
raise NameError, path unless Module === klass
|
53
|
+
klass.constants.grep(/#{name}/i) do |c|
|
54
|
+
klass.const_defined?(c) or next
|
55
|
+
klass.const_get(c)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def search_const(klass, name)
|
61
|
+
klasses = [klass]
|
62
|
+
while klass = klasses.shift
|
63
|
+
klass.constants.each do |cname|
|
64
|
+
klass.const_defined?(cname) or next
|
65
|
+
const = klass.const_get(cname)
|
66
|
+
yield klass, cname, const if name === cname
|
67
|
+
klasses << const if Module === const and const != ::Object
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|