rubygems-update 3.3.19 → 3.3.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/bin/update_rubygems +1 -1
- data/bundler/CHANGELOG.md +26 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/install.rb +5 -2
- data/bundler/lib/bundler/cli/outdated.rb +12 -3
- data/bundler/lib/bundler/cli/platform.rb +1 -1
- data/bundler/lib/bundler/cli.rb +5 -3
- data/bundler/lib/bundler/definition.rb +61 -11
- data/bundler/lib/bundler/fetcher.rb +6 -6
- data/bundler/lib/bundler/gem_helpers.rb +7 -1
- data/bundler/lib/bundler/installer/standalone.rb +1 -1
- data/bundler/lib/bundler/installer.rb +8 -1
- data/bundler/lib/bundler/lazy_specification.rb +21 -21
- data/bundler/lib/bundler/man/bundle-cache.1 +6 -0
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/bundler/lib/bundler/man/bundle-config.1 +2 -2
- data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
- data/bundler/lib/bundler/man/bundle-install.1 +4 -0
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +15 -5
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle.1 +3 -6
- data/bundler/lib/bundler/man/bundle.1.ronn +3 -4
- data/bundler/lib/bundler/resolver.rb +2 -1
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +5 -5
- data/bundler/lib/bundler/rubygems_ext.rb +13 -0
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +4 -0
- data/bundler/lib/bundler/spec_set.rb +15 -28
- data/bundler/lib/bundler/version.rb +1 -1
- data/lib/rubygems/available_set.rb +3 -3
- data/lib/rubygems/basic_specification.rb +2 -2
- data/lib/rubygems/command.rb +6 -6
- data/lib/rubygems/commands/cert_command.rb +1 -1
- data/lib/rubygems/commands/cleanup_command.rb +1 -1
- data/lib/rubygems/commands/contents_command.rb +1 -1
- data/lib/rubygems/commands/dependency_command.rb +4 -4
- data/lib/rubygems/commands/fetch_command.rb +2 -2
- data/lib/rubygems/commands/generate_index_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +7 -7
- data/lib/rubygems/commands/pristine_command.rb +5 -5
- data/lib/rubygems/commands/setup_command.rb +4 -4
- data/lib/rubygems/commands/sources_command.rb +3 -3
- data/lib/rubygems/commands/specification_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +4 -4
- data/lib/rubygems/commands/update_command.rb +5 -5
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/config_file.rb +7 -7
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/defaults.rb +1 -1
- data/lib/rubygems/dependency.rb +5 -5
- data/lib/rubygems/dependency_installer.rb +5 -5
- data/lib/rubygems/dependency_list.rb +4 -4
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/exceptions.rb +1 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +2 -2
- data/lib/rubygems/gemcutter_utilities.rb +1 -1
- data/lib/rubygems/indexer.rb +3 -3
- data/lib/rubygems/installer.rb +5 -13
- data/lib/rubygems/name_tuple.rb +3 -3
- data/lib/rubygems/package/tar_header.rb +17 -17
- data/lib/rubygems/package/tar_writer.rb +1 -1
- data/lib/rubygems/package.rb +19 -8
- data/lib/rubygems/platform.rb +15 -15
- data/lib/rubygems/query_utils.rb +6 -6
- data/lib/rubygems/remote_fetcher.rb +3 -3
- data/lib/rubygems/request/connection_pools.rb +2 -2
- data/lib/rubygems/request/http_pool.rb +1 -1
- data/lib/rubygems/request.rb +1 -1
- data/lib/rubygems/request_set/gem_dependency_api.rb +3 -3
- data/lib/rubygems/request_set/lockfile/parser.rb +12 -12
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +2 -2
- data/lib/rubygems/request_set.rb +3 -3
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/api_specification.rb +4 -4
- data/lib/rubygems/resolver/best_set.rb +3 -3
- data/lib/rubygems/resolver/conflict.rb +3 -3
- data/lib/rubygems/resolver/git_specification.rb +3 -3
- data/lib/rubygems/resolver/index_specification.rb +3 -2
- data/lib/rubygems/resolver/installed_specification.rb +2 -2
- data/lib/rubygems/resolver/installer_set.rb +7 -12
- data/lib/rubygems/resolver/lock_set.rb +1 -1
- data/lib/rubygems/resolver/lock_specification.rb +1 -1
- data/lib/rubygems/resolver/vendor_specification.rb +3 -3
- data/lib/rubygems/resolver.rb +4 -4
- data/lib/rubygems/security/policy.rb +6 -6
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +4 -4
- data/lib/rubygems/source.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +1 -1
- data/lib/rubygems/specification.rb +26 -24
- data/lib/rubygems/specification_policy.rb +4 -4
- data/lib/rubygems/uninstaller.rb +4 -4
- data/lib/rubygems/user_interaction.rb +2 -2
- data/lib/rubygems/version.rb +12 -4
- data/lib/rubygems.rb +8 -8
- data/rubygems-update.gemspec +1 -1
- data/setup.rb +1 -1
- data/test/rubygems/helper.rb +5 -5
- data/test/rubygems/test_gem_config_file.rb +17 -5
- data/test/rubygems/test_gem_dependency_installer.rb +2 -2
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +1 -1
- data/test/rubygems/test_gem_installer.rb +6 -3
- data/test/rubygems/test_gem_package.rb +22 -0
- data/test/rubygems/test_gem_package_tar_reader.rb +1 -1
- data/test/rubygems/test_gem_requirement.rb +9 -3
- data/test/rubygems/test_gem_resolver_index_specification.rb +1 -1
- data/test/rubygems/test_gem_resolver_installer_set.rb +44 -0
- data/test/rubygems/test_gem_specification.rb +11 -2
- data/test/rubygems/test_gem_version.rb +9 -2
- data/test/rubygems/test_require.rb +1 -1
- data/test/rubygems/utilities.rb +4 -4
- metadata +3 -3
@@ -7,36 +7,43 @@ bundle-platform(1) -- Displays platform compatibility information
|
|
7
7
|
|
8
8
|
## DESCRIPTION
|
9
9
|
|
10
|
-
`platform`
|
10
|
+
`platform` displays information from your Gemfile, Gemfile.lock, and Ruby
|
11
11
|
VM about your platform.
|
12
12
|
|
13
13
|
For instance, using this Gemfile(5):
|
14
14
|
|
15
15
|
source "https://rubygems.org"
|
16
16
|
|
17
|
-
ruby "1.
|
17
|
+
ruby "3.1.2"
|
18
18
|
|
19
19
|
gem "rack"
|
20
20
|
|
21
|
-
If you run `bundle platform` on Ruby 1.
|
21
|
+
If you run `bundle platform` on Ruby 3.1.2, it displays the following output:
|
22
22
|
|
23
23
|
Your platform is: x86_64-linux
|
24
24
|
|
25
25
|
Your app has gems that work on these platforms:
|
26
|
+
* arm64-darwin-21
|
26
27
|
* ruby
|
28
|
+
* x64-mingw-ucrt
|
29
|
+
* x86_64-linux
|
27
30
|
|
28
31
|
Your Gemfile specifies a Ruby version requirement:
|
29
|
-
* ruby 1.
|
32
|
+
* ruby 3.1.2
|
30
33
|
|
31
34
|
Your current platform satisfies the Ruby version requirement.
|
32
35
|
|
33
|
-
`platform`
|
34
|
-
`ruby` directive if applicable from your Gemfile(5). It
|
36
|
+
`platform` lists all the platforms in your `Gemfile.lock` as well as the
|
37
|
+
`ruby` directive if applicable from your Gemfile(5). It also lets you know
|
35
38
|
if the `ruby` directive requirement has been met. If `ruby` directive doesn't
|
36
|
-
match the running Ruby VM, it
|
39
|
+
match the running Ruby VM, it tells you what part does not.
|
37
40
|
|
38
41
|
## OPTIONS
|
39
42
|
|
40
43
|
* `--ruby`:
|
41
44
|
It will display the ruby directive information, so you don't have to
|
42
45
|
parse it from the Gemfile(5).
|
46
|
+
|
47
|
+
## SEE ALSO
|
48
|
+
|
49
|
+
* [bundle-lock(1)](bundle-lock.1.ronn)
|
@@ -43,8 +43,8 @@ Install the gems specified by the \fBGemfile\fR or \fBGemfile\.lock\fR
|
|
43
43
|
Update dependencies to their latest versions
|
44
44
|
.
|
45
45
|
.TP
|
46
|
-
\fBbundle
|
47
|
-
Package the \.gem files required by your application into the \fBvendor/cache\fR directory
|
46
|
+
\fBbundle cache(1)\fR \fIbundle\-cache\.1\.html\fR
|
47
|
+
Package the \.gem files required by your application into the \fBvendor/cache\fR directory (aliases: \fBbundle package\fR, \fBbundle pack\fR)
|
48
48
|
.
|
49
49
|
.TP
|
50
50
|
\fBbundle exec(1)\fR \fIbundle\-exec\.1\.html\fR
|
@@ -81,7 +81,7 @@ Show the source location of a particular gem in the bundle
|
|
81
81
|
Show all of the outdated gems in the current bundle
|
82
82
|
.
|
83
83
|
.TP
|
84
|
-
\fBbundle console(1)\fR
|
84
|
+
\fBbundle console(1)\fR (deprecated)
|
85
85
|
Start an IRB session in the current bundle
|
86
86
|
.
|
87
87
|
.TP
|
@@ -127,9 +127,6 @@ When running a command that isn\'t listed in PRIMARY COMMANDS or UTILITIES, Bund
|
|
127
127
|
These commands are obsolete and should no longer be used:
|
128
128
|
.
|
129
129
|
.IP "\(bu" 4
|
130
|
-
\fBbundle cache(1)\fR
|
131
|
-
.
|
132
|
-
.IP "\(bu" 4
|
133
130
|
\fBbundle inject(1)\fR
|
134
131
|
.
|
135
132
|
.IP "" 0
|
@@ -36,9 +36,9 @@ We divide `bundle` subcommands into primary commands and utilities:
|
|
36
36
|
* [`bundle update(1)`](bundle-update.1.html):
|
37
37
|
Update dependencies to their latest versions
|
38
38
|
|
39
|
-
* [`bundle
|
39
|
+
* [`bundle cache(1)`](bundle-cache.1.html):
|
40
40
|
Package the .gem files required by your application into the
|
41
|
-
`vendor/cache` directory
|
41
|
+
`vendor/cache` directory (aliases: `bundle package`, `bundle pack`)
|
42
42
|
|
43
43
|
* [`bundle exec(1)`](bundle-exec.1.html):
|
44
44
|
Execute a script in the current bundle
|
@@ -67,7 +67,7 @@ We divide `bundle` subcommands into primary commands and utilities:
|
|
67
67
|
* [`bundle outdated(1)`](bundle-outdated.1.html):
|
68
68
|
Show all of the outdated gems in the current bundle
|
69
69
|
|
70
|
-
* `bundle console(1)
|
70
|
+
* `bundle console(1)` (deprecated):
|
71
71
|
Start an IRB session in the current bundle
|
72
72
|
|
73
73
|
* [`bundle open(1)`](bundle-open.1.html):
|
@@ -107,5 +107,4 @@ and execute it, passing down any extra arguments to it.
|
|
107
107
|
|
108
108
|
These commands are obsolete and should no longer be used:
|
109
109
|
|
110
|
-
* `bundle cache(1)`
|
111
110
|
* `bundle inject(1)`
|
@@ -28,10 +28,11 @@ module Bundler
|
|
28
28
|
def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms, metadata_requirements)
|
29
29
|
@source_requirements = source_requirements
|
30
30
|
@metadata_requirements = metadata_requirements
|
31
|
+
@base = base
|
31
32
|
@resolver = Molinillo::Resolver.new(self, self)
|
32
33
|
@search_for = {}
|
33
34
|
@base_dg = Molinillo::DependencyGraph.new
|
34
|
-
|
35
|
+
base.each do |ls|
|
35
36
|
dep = Dependency.new(ls.name, ls.version)
|
36
37
|
@base_dg.add_vertex(ls.name, DepProxy.get_proxy(dep, ls.platform), true)
|
37
38
|
end
|
@@ -9,7 +9,7 @@ module Bundler
|
|
9
9
|
raise GemfileError, "Please define :engine" if options[:engine_version] && options[:engine].nil?
|
10
10
|
|
11
11
|
if options[:engine] == "ruby" && options[:engine_version] &&
|
12
|
-
|
12
|
+
ruby_version != Array(options[:engine_version])
|
13
13
|
raise GemfileEvalError, "ruby_version must match the :engine_version for MRI"
|
14
14
|
end
|
15
15
|
@ruby_version = RubyVersion.new(ruby_version, options[:patchlevel], options[:engine], options[:engine_version])
|
@@ -32,12 +32,12 @@ module Bundler
|
|
32
32
|
@engine = engine && engine.to_s || "ruby"
|
33
33
|
@engine_versions = (engine_version && Array(engine_version)) || @versions
|
34
34
|
@engine_gem_version = Gem::Requirement.create(@engine_versions.first).requirements.first.last
|
35
|
-
@patchlevel = patchlevel
|
35
|
+
@patchlevel = patchlevel || (@gem_version.prerelease? ? "-1" : nil)
|
36
36
|
end
|
37
37
|
|
38
38
|
def to_s(versions = self.versions)
|
39
39
|
output = String.new("ruby #{versions_string(versions)}")
|
40
|
-
output << "p#{patchlevel}" if patchlevel
|
40
|
+
output << "p#{patchlevel}" if patchlevel && patchlevel != "-1"
|
41
41
|
output << " (#{engine} #{versions_string(engine_versions)})" unless engine == "ruby"
|
42
42
|
|
43
43
|
output
|
@@ -46,7 +46,7 @@ module Bundler
|
|
46
46
|
# @private
|
47
47
|
PATTERN = /
|
48
48
|
ruby\s
|
49
|
-
(
|
49
|
+
(\d+\.\d+\.\d+(?:\.\S+)?) # ruby version
|
50
50
|
(?:p(-?\d+))? # optional patchlevel
|
51
51
|
(?:\s\((\S+)\s(.+)\))? # optional engine info
|
52
52
|
/xo.freeze
|
@@ -103,8 +103,8 @@ module Bundler
|
|
103
103
|
|
104
104
|
def self.system
|
105
105
|
ruby_engine = RUBY_ENGINE.dup
|
106
|
-
ruby_version =
|
107
|
-
ruby_engine_version = RUBY_ENGINE_VERSION.dup
|
106
|
+
ruby_version = Gem.ruby_version.to_s
|
107
|
+
ruby_engine_version = RUBY_ENGINE == "ruby" ? ruby_version : RUBY_ENGINE_VERSION.dup
|
108
108
|
patchlevel = RUBY_PATCHLEVEL.to_s
|
109
109
|
|
110
110
|
@ruby_version ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
|
@@ -17,6 +17,15 @@ require "rubygems/source"
|
|
17
17
|
|
18
18
|
require_relative "match_platform"
|
19
19
|
|
20
|
+
# Cherry-pick fixes to `Gem.ruby_version` to be useful for modern Bundler
|
21
|
+
# versions and ignore patchlevels
|
22
|
+
# (https://github.com/rubygems/rubygems/pull/5472,
|
23
|
+
# https://github.com/rubygems/rubygems/pull/5486). May be removed once RubyGems
|
24
|
+
# 3.3.12 support is dropped.
|
25
|
+
unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
|
26
|
+
Gem.instance_variable_set(:@ruby_version, Gem::Version.new(RUBY_VERSION))
|
27
|
+
end
|
28
|
+
|
20
29
|
module Gem
|
21
30
|
class Specification
|
22
31
|
include ::Bundler::MatchPlatform
|
@@ -146,6 +155,10 @@ module Gem
|
|
146
155
|
|
147
156
|
alias_method :eql?, :==
|
148
157
|
|
158
|
+
def force_ruby_platform
|
159
|
+
false
|
160
|
+
end
|
161
|
+
|
149
162
|
def encode_with(coder)
|
150
163
|
to_yaml_properties.each do |ivar|
|
151
164
|
coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
|
@@ -5,7 +5,7 @@ module Bundler
|
|
5
5
|
class Metadata < Source
|
6
6
|
def specs
|
7
7
|
@specs ||= Index.build do |idx|
|
8
|
-
idx << Gem::Specification.new("Ruby\0",
|
8
|
+
idx << Gem::Specification.new("Ruby\0", Gem.ruby_version)
|
9
9
|
idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.default
|
11
11
|
end
|
@@ -101,6 +101,10 @@ module Bundler
|
|
101
101
|
source_list_for(source).find {|s| equivalent_source?(source, s) }
|
102
102
|
end
|
103
103
|
|
104
|
+
def get_with_fallback(source)
|
105
|
+
get(source) || default_source
|
106
|
+
end
|
107
|
+
|
104
108
|
def lock_sources
|
105
109
|
lock_other_sources + lock_rubygems_sources
|
106
110
|
end
|
@@ -13,14 +13,16 @@ module Bundler
|
|
13
13
|
|
14
14
|
def for(dependencies, check = false, platforms = [nil])
|
15
15
|
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
|
16
|
-
deps = dependencies.product(platforms)
|
16
|
+
deps = dependencies.product(platforms)
|
17
17
|
specs = []
|
18
18
|
|
19
19
|
loop do
|
20
20
|
break unless dep = deps.shift
|
21
|
-
next if handled.key?(dep)
|
22
21
|
|
23
|
-
|
22
|
+
key = [dep[0].name, dep[1]]
|
23
|
+
next if handled.key?(key)
|
24
|
+
|
25
|
+
handled[key] = true
|
24
26
|
|
25
27
|
specs_for_dep = specs_for_dependency(*dep)
|
26
28
|
if specs_for_dep.any?
|
@@ -28,17 +30,13 @@ module Bundler
|
|
28
30
|
|
29
31
|
specs_for_dep.first.dependencies.each do |d|
|
30
32
|
next if d.type == :development
|
31
|
-
deps << [d
|
33
|
+
deps << [d, dep[1]]
|
32
34
|
end
|
33
35
|
elsif check
|
34
|
-
specs << IncompleteSpecification.new(*
|
36
|
+
specs << IncompleteSpecification.new(*key)
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
38
|
-
if spec = lookup["bundler"].first
|
39
|
-
specs << spec
|
40
|
-
end
|
41
|
-
|
42
40
|
specs
|
43
41
|
end
|
44
42
|
|
@@ -66,13 +64,8 @@ module Bundler
|
|
66
64
|
end
|
67
65
|
|
68
66
|
def materialize(deps)
|
69
|
-
materialized = self.for(deps, true)
|
67
|
+
materialized = self.for(deps, true)
|
70
68
|
|
71
|
-
materialized.map! do |s|
|
72
|
-
next s unless s.is_a?(LazySpecification)
|
73
|
-
s.source.local!
|
74
|
-
s.materialize_for_installation || s
|
75
|
-
end
|
76
69
|
SpecSet.new(materialized)
|
77
70
|
end
|
78
71
|
|
@@ -82,7 +75,6 @@ module Bundler
|
|
82
75
|
def materialized_for_all_platforms
|
83
76
|
@specs.map do |s|
|
84
77
|
next s unless s.is_a?(LazySpecification)
|
85
|
-
s.source.local!
|
86
78
|
s.source.remote!
|
87
79
|
spec = s.materialize_for_installation
|
88
80
|
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
@@ -90,13 +82,8 @@ module Bundler
|
|
90
82
|
end
|
91
83
|
end
|
92
84
|
|
93
|
-
def
|
94
|
-
|
95
|
-
spec = s.materialize_for_resolution
|
96
|
-
yield spec if spec
|
97
|
-
spec
|
98
|
-
end.compact
|
99
|
-
SpecSet.new(materialized)
|
85
|
+
def incomplete_ruby_specs?(deps)
|
86
|
+
self.class.new(self.for(deps, true, [Gem::Platform::RUBY])).incomplete_specs.any?
|
100
87
|
end
|
101
88
|
|
102
89
|
def missing_specs
|
@@ -181,13 +168,13 @@ module Bundler
|
|
181
168
|
@specs.sort_by(&:name).each {|s| yield s }
|
182
169
|
end
|
183
170
|
|
184
|
-
def specs_for_dependency(
|
185
|
-
specs_for_name = lookup[name]
|
171
|
+
def specs_for_dependency(dep, platform)
|
172
|
+
specs_for_name = lookup[dep.name]
|
186
173
|
if platform.nil?
|
187
|
-
|
174
|
+
matching_specs = specs_for_name.map {|s| s.materialize_for_installation if Gem::Platform.match_spec?(s) }.compact
|
175
|
+
GemHelpers.sort_best_platform_match(matching_specs, Bundler.local_platform)
|
188
176
|
else
|
189
|
-
|
190
|
-
specs_for_name_and_platform.any? ? specs_for_name_and_platform : specs_for_name
|
177
|
+
GemHelpers.select_best_platform_match(specs_for_name, dep.force_ruby_platform ? Gem::Platform::RUBY : platform)
|
191
178
|
end
|
192
179
|
end
|
193
180
|
|
@@ -26,7 +26,7 @@ class Gem::AvailableSet
|
|
26
26
|
s = o.set
|
27
27
|
when Array
|
28
28
|
s = o.map do |sp,so|
|
29
|
-
if !sp.kind_of?(Gem::Specification)
|
29
|
+
if !sp.kind_of?(Gem::Specification) || !so.kind_of?(Gem::Source)
|
30
30
|
raise TypeError, "Array must be in [[spec, source], ...] form"
|
31
31
|
end
|
32
32
|
|
@@ -149,8 +149,8 @@ class Gem::AvailableSet
|
|
149
149
|
@set.reject! do |t|
|
150
150
|
# already locally installed
|
151
151
|
Gem::Specification.any? do |installed_spec|
|
152
|
-
dep.name == installed_spec.name
|
153
|
-
dep.requirement.satisfied_by?
|
152
|
+
dep.name == installed_spec.name &&
|
153
|
+
dep.requirement.satisfied_by?(installed_spec.version)
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
@@ -77,7 +77,7 @@ class Gem::BasicSpecification
|
|
77
77
|
|
78
78
|
if Gem::Platform::RUBY == platform || Gem::Platform.local === platform
|
79
79
|
warn "Ignoring #{full_name} because its extensions are not built. " +
|
80
|
-
|
80
|
+
"Try: gem pristine #{name} --version #{version}"
|
81
81
|
end
|
82
82
|
|
83
83
|
return false
|
@@ -131,7 +131,7 @@ class Gem::BasicSpecification
|
|
131
131
|
# default Ruby platform.
|
132
132
|
|
133
133
|
def full_name
|
134
|
-
if platform == Gem::Platform::RUBY
|
134
|
+
if platform == Gem::Platform::RUBY || platform.nil?
|
135
135
|
"#{name}-#{version}".dup.tap(&Gem::UNTAINT)
|
136
136
|
else
|
137
137
|
"#{name}-#{version}-#{platform}".dup.tap(&Gem::UNTAINT)
|
data/lib/rubygems/command.rb
CHANGED
@@ -159,11 +159,11 @@ class Gem::Command
|
|
159
159
|
gem = "'#{gem_name}' (#{version})"
|
160
160
|
msg = String.new "Could not find a valid gem #{gem}"
|
161
161
|
|
162
|
-
if errors
|
162
|
+
if errors && !errors.empty?
|
163
163
|
msg << ", here is why:\n"
|
164
164
|
errors.each {|x| msg << " #{x.wordy}\n" }
|
165
165
|
else
|
166
|
-
if required_by
|
166
|
+
if required_by && gem != required_by
|
167
167
|
msg << " (required by #{required_by}) in any repository"
|
168
168
|
else
|
169
169
|
msg << " in any repository"
|
@@ -186,7 +186,7 @@ class Gem::Command
|
|
186
186
|
def get_all_gem_names
|
187
187
|
args = options[:args]
|
188
188
|
|
189
|
-
if args.nil?
|
189
|
+
if args.nil? || args.empty?
|
190
190
|
raise Gem::CommandLineError,
|
191
191
|
"Please specify at least one gem name (e.g. gem build GEMNAME)"
|
192
192
|
end
|
@@ -216,7 +216,7 @@ class Gem::Command
|
|
216
216
|
def get_one_gem_name
|
217
217
|
args = options[:args]
|
218
218
|
|
219
|
-
if args.nil?
|
219
|
+
if args.nil? || args.empty?
|
220
220
|
raise Gem::CommandLineError,
|
221
221
|
"Please specify a gem name on the command line (e.g. gem build GEMNAME)"
|
222
222
|
end
|
@@ -554,7 +554,7 @@ class Gem::Command
|
|
554
554
|
end
|
555
555
|
|
556
556
|
def configure_options(header, option_list)
|
557
|
-
return if option_list.nil?
|
557
|
+
return if option_list.nil? || option_list.empty?
|
558
558
|
|
559
559
|
header = header.to_s.empty? ? "" : "#{header} "
|
560
560
|
@parser.separator " #{header}Options:"
|
@@ -586,7 +586,7 @@ class Gem::Command
|
|
586
586
|
add_common_option("-V", "--[no-]verbose",
|
587
587
|
"Set the verbose level of output") do |value, options|
|
588
588
|
# Set us to "really verbose" so the progress meter works
|
589
|
-
if Gem.configuration.verbose
|
589
|
+
if Gem.configuration.verbose && value
|
590
590
|
Gem.configuration.verbose = 1
|
591
591
|
else
|
592
592
|
Gem.configuration.verbose = value
|
@@ -152,7 +152,7 @@ class Gem::Commands::CertCommand < Gem::Command
|
|
152
152
|
|
153
153
|
def build_cert(email, key) # :nodoc:
|
154
154
|
expiration_length_days = options[:expiration_length_days] ||
|
155
|
-
|
155
|
+
Gem.configuration.cert_expiration_length_days
|
156
156
|
|
157
157
|
cert = Gem::Security.create_cert_email(
|
158
158
|
email,
|
@@ -149,7 +149,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
149
149
|
@primary_gems = {}
|
150
150
|
|
151
151
|
Gem::Specification.each do |spec|
|
152
|
-
if @primary_gems[spec.name].nil?
|
152
|
+
if @primary_gems[spec.name].nil? ||
|
153
153
|
@primary_gems[spec.name].version < spec.version
|
154
154
|
@primary_gems[spec.name] = spec
|
155
155
|
end
|
@@ -77,7 +77,7 @@ use with other commands.
|
|
77
77
|
name_matches = name_pattern ? name_pattern =~ spec.name : true
|
78
78
|
version_matches = requirement.satisfied_by?(spec.version)
|
79
79
|
|
80
|
-
name_matches
|
80
|
+
name_matches && version_matches
|
81
81
|
}.map(&:to_spec)
|
82
82
|
end
|
83
83
|
|
@@ -133,7 +133,7 @@ use with other commands.
|
|
133
133
|
end
|
134
134
|
|
135
135
|
def ensure_local_only_reverse_dependencies # :nodoc:
|
136
|
-
if options[:reverse_dependencies]
|
136
|
+
if options[:reverse_dependencies] && remote? && !local?
|
137
137
|
alert_error "Only reverse dependencies for local gems are supported."
|
138
138
|
terminate_interaction 1
|
139
139
|
end
|
@@ -182,7 +182,7 @@ use with other commands.
|
|
182
182
|
sp.dependencies.each do |dep|
|
183
183
|
dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep
|
184
184
|
|
185
|
-
if spec.name == dep.name
|
185
|
+
if spec.name == dep.name &&
|
186
186
|
dep.requirement.satisfied_by?(spec.version)
|
187
187
|
result << [sp.full_name, dep]
|
188
188
|
end
|
@@ -197,7 +197,7 @@ use with other commands.
|
|
197
197
|
def name_pattern(args)
|
198
198
|
return if args.empty?
|
199
199
|
|
200
|
-
if args.length == 1
|
200
|
+
if args.length == 1 && args.first =~ /\A(.*)(i)?\z/m
|
201
201
|
flags = $2 ? Regexp::IGNORECASE : nil
|
202
202
|
Regexp.new $1, flags
|
203
203
|
else
|
@@ -52,8 +52,8 @@ then repackaging it.
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def check_version # :nodoc:
|
55
|
-
if options[:version] != Gem::Requirement.default
|
56
|
-
|
55
|
+
if options[:version] != Gem::Requirement.default &&
|
56
|
+
get_all_gem_names.size > 1
|
57
57
|
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
58
58
|
" version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
59
59
|
terminate_interaction 1
|
@@ -68,8 +68,8 @@ Marshal::MINOR_VERSION constants. It is used to ensure compatibility.
|
|
68
68
|
# This is always true because it's the only way now.
|
69
69
|
options[:build_modern] = true
|
70
70
|
|
71
|
-
if
|
72
|
-
|
71
|
+
if !File.exist?(options[:directory]) ||
|
72
|
+
!File.directory?(options[:directory])
|
73
73
|
alert_error "unknown directory name #{options[:directory]}."
|
74
74
|
terminate_interaction 1
|
75
75
|
else
|
@@ -46,8 +46,8 @@ class Gem::Commands::InstallCommand < Gem::Command
|
|
46
46
|
|
47
47
|
def defaults_str # :nodoc:
|
48
48
|
"--both --version '#{Gem::Requirement.default}' --no-force\n" +
|
49
|
-
|
50
|
-
|
49
|
+
"--install-dir #{Gem.dir} --lock\n" +
|
50
|
+
install_update_defaults_str
|
51
51
|
end
|
52
52
|
|
53
53
|
def description # :nodoc:
|
@@ -134,15 +134,15 @@ You can use `i` command instead of `install`.
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def check_install_dir # :nodoc:
|
137
|
-
if options[:install_dir]
|
137
|
+
if options[:install_dir] && options[:user_install]
|
138
138
|
alert_error "Use --install-dir or --user-install but not both"
|
139
139
|
terminate_interaction 1
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
143
|
def check_version # :nodoc:
|
144
|
-
if options[:version] != Gem::Requirement.default
|
145
|
-
|
144
|
+
if options[:version] != Gem::Requirement.default &&
|
145
|
+
get_all_gem_names.size > 1
|
146
146
|
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
147
147
|
" version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
148
148
|
terminate_interaction 1
|
@@ -191,8 +191,8 @@ You can use `i` command instead of `install`.
|
|
191
191
|
end
|
192
192
|
|
193
193
|
def install_gem(name, version) # :nodoc:
|
194
|
-
return if options[:conservative]
|
195
|
-
|
194
|
+
return if options[:conservative] &&
|
195
|
+
!Gem::Dependency.new(name, version).matching_specs.empty?
|
196
196
|
|
197
197
|
req = Gem::Requirement.create(version)
|
198
198
|
|
@@ -102,10 +102,10 @@ extensions will be restored.
|
|
102
102
|
|
103
103
|
# `--extensions` must be explicitly given to pristine only gems
|
104
104
|
# with extensions.
|
105
|
-
elsif options[:extensions_set]
|
106
|
-
|
105
|
+
elsif options[:extensions_set] &&
|
106
|
+
options[:extensions] && options[:args].empty?
|
107
107
|
Gem::Specification.select do |spec|
|
108
|
-
spec.extensions
|
108
|
+
spec.extensions && !spec.extensions.empty?
|
109
109
|
end
|
110
110
|
else
|
111
111
|
get_all_gem_names.sort.map do |gem_name|
|
@@ -135,14 +135,14 @@ extensions will be restored.
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
unless spec.extensions.empty?
|
138
|
+
unless spec.extensions.empty? || options[:extensions] || options[:only_executables] || options[:only_plugins]
|
139
139
|
say "Skipped #{spec.full_name}, it needs to compile an extension"
|
140
140
|
next
|
141
141
|
end
|
142
142
|
|
143
143
|
gem = spec.cache_file
|
144
144
|
|
145
|
-
unless File.exist?
|
145
|
+
unless File.exist?(gem) || options[:only_executables] || options[:only_plugins]
|
146
146
|
require_relative "../remote_fetcher"
|
147
147
|
|
148
148
|
say "Cached gem for #{spec.full_name} not found, attempting to fetch..."
|
@@ -329,9 +329,9 @@ By default, this RubyGems will install gem as:
|
|
329
329
|
# ignore
|
330
330
|
end
|
331
331
|
|
332
|
-
if File.writable?
|
333
|
-
(
|
334
|
-
File.writable?
|
332
|
+
if File.writable?(gem_doc_dir) &&
|
333
|
+
(!File.exist?(rubygems_doc_dir) ||
|
334
|
+
File.writable?(rubygems_doc_dir))
|
335
335
|
say "Removing old RubyGems RDoc and ri" if @verbose
|
336
336
|
Dir[File.join(Gem.dir, "doc", "rubygems-[0-9]*")].each do |dir|
|
337
337
|
rm_rf dir
|
@@ -559,7 +559,7 @@ abort "#{deprecation_message}"
|
|
559
559
|
|
560
560
|
history_string = ""
|
561
561
|
|
562
|
-
until versions.length == 0
|
562
|
+
until versions.length == 0 ||
|
563
563
|
versions.shift <= options[:previous_version] do
|
564
564
|
history_string += version_lines.shift + text.shift
|
565
565
|
end
|
@@ -82,7 +82,7 @@ Do you want to add this source?
|
|
82
82
|
def check_rubygems_https(source_uri) # :nodoc:
|
83
83
|
uri = URI source_uri
|
84
84
|
|
85
|
-
if uri.scheme
|
85
|
+
if uri.scheme && uri.scheme.downcase == "http" &&
|
86
86
|
uri.host.downcase == "rubygems.org"
|
87
87
|
question = <<-QUESTION.chomp
|
88
88
|
https://rubygems.org is recommended for security over #{uri}
|
@@ -215,9 +215,9 @@ To remove a source use the --remove argument:
|
|
215
215
|
def remove_cache_file(desc, path) # :nodoc:
|
216
216
|
FileUtils.rm_rf path
|
217
217
|
|
218
|
-
if
|
218
|
+
if !File.exist?(path)
|
219
219
|
say "*** Removed #{desc} source cache ***"
|
220
|
-
elsif
|
220
|
+
elsif !File.writable?(path)
|
221
221
|
say "*** Unable to remove #{desc} source cache (write protected) ***"
|
222
222
|
else
|
223
223
|
say "*** Unable to remove #{desc} source cache ***"
|
@@ -88,7 +88,7 @@ Specific fields in the specification can be extracted in YAML format:
|
|
88
88
|
raise Gem::CommandLineError, "Unsupported version type: '#{v}'"
|
89
89
|
end
|
90
90
|
|
91
|
-
if !req.none?
|
91
|
+
if !req.none? && options[:all]
|
92
92
|
alert_error "Specify --all or -v, not both"
|
93
93
|
terminate_interaction 1
|
94
94
|
end
|
@@ -102,7 +102,7 @@ Specific fields in the specification can be extracted in YAML format:
|
|
102
102
|
field = get_one_optional_argument
|
103
103
|
|
104
104
|
raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if
|
105
|
-
field
|
105
|
+
field && options[:format] == :ruby
|
106
106
|
|
107
107
|
if local?
|
108
108
|
if File.exist? gem
|