rubygems-update 3.3.19 → 3.3.20
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 +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
|