mirror of
https://github.com/ruby/ruby.git
synced 2025-09-21 03:24:00 +02:00
Merge RubyGems-3.3.20 and Bundler-2.3.20
This commit is contained in:
parent
44c926f3a9
commit
522b75f1b6
135 changed files with 1131 additions and 613 deletions
|
@ -218,6 +218,8 @@ module Bundler
|
||||||
"Specify the number of jobs to run in parallel"
|
"Specify the number of jobs to run in parallel"
|
||||||
method_option "local", :type => :boolean, :banner =>
|
method_option "local", :type => :boolean, :banner =>
|
||||||
"Do not attempt to fetch gems remotely and use the gem cache instead"
|
"Do not attempt to fetch gems remotely and use the gem cache instead"
|
||||||
|
method_option "prefer-local", :type => :boolean, :banner =>
|
||||||
|
"Only attempt to fetch gems remotely if not present locally, even if newer versions are available remotely"
|
||||||
method_option "no-cache", :type => :boolean, :banner =>
|
method_option "no-cache", :type => :boolean, :banner =>
|
||||||
"Don't update the existing gem cache."
|
"Don't update the existing gem cache."
|
||||||
method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
|
method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
|
||||||
|
@ -399,9 +401,9 @@ module Bundler
|
||||||
"Do not attempt to fetch gems remotely and use the gem cache instead"
|
"Do not attempt to fetch gems remotely and use the gem cache instead"
|
||||||
method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
|
method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
|
||||||
method_option "source", :type => :array, :banner => "Check against a specific source"
|
method_option "source", :type => :array, :banner => "Check against a specific source"
|
||||||
method_option "filter-strict", :type => :boolean, :banner =>
|
method_option "filter-strict", :type => :boolean, :aliases => "--strict", :banner =>
|
||||||
"Only list newer versions allowed by your Gemfile requirements"
|
"Only list newer versions allowed by your Gemfile requirements"
|
||||||
method_option "strict", :type => :boolean, :aliases => "--update-strict", :banner =>
|
method_option "update-strict", :type => :boolean, :banner =>
|
||||||
"Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
|
"Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
|
||||||
method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
|
method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
|
||||||
method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
|
method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
|
||||||
|
|
|
@ -147,8 +147,11 @@ module Bundler
|
||||||
def normalize_settings
|
def normalize_settings
|
||||||
Bundler.settings.set_command_option :path, nil if options[:system]
|
Bundler.settings.set_command_option :path, nil if options[:system]
|
||||||
Bundler.settings.set_command_option_if_given :path, options[:path]
|
Bundler.settings.set_command_option_if_given :path, options[:path]
|
||||||
|
|
||||||
|
if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
|
||||||
Bundler.settings.temporary(:path_relative_to_cwd => false) do
|
Bundler.settings.temporary(:path_relative_to_cwd => false) do
|
||||||
Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
|
Bundler.settings.set_command_option :path, "bundle"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
bin_option = options["binstubs"]
|
bin_option = options["binstubs"]
|
||||||
|
|
|
@ -46,7 +46,7 @@ module Bundler
|
||||||
|
|
||||||
Bundler::CLI::Common.configure_gem_version_promoter(
|
Bundler::CLI::Common.configure_gem_version_promoter(
|
||||||
Bundler.definition,
|
Bundler.definition,
|
||||||
options
|
options.merge(:strict => @strict)
|
||||||
)
|
)
|
||||||
|
|
||||||
definition_resolution = proc do
|
definition_resolution = proc do
|
||||||
|
@ -129,6 +129,12 @@ module Bundler
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def loaded_from_for(spec)
|
||||||
|
return unless spec.respond_to?(:loaded_from)
|
||||||
|
|
||||||
|
spec.loaded_from
|
||||||
|
end
|
||||||
|
|
||||||
def groups_text(group_text, groups)
|
def groups_text(group_text, groups)
|
||||||
"#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
|
"#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
|
||||||
end
|
end
|
||||||
|
@ -184,7 +190,10 @@ module Bundler
|
||||||
|
|
||||||
def print_gem(current_spec, active_spec, dependency, groups)
|
def print_gem(current_spec, active_spec, dependency, groups)
|
||||||
spec_version = "#{active_spec.version}#{active_spec.git_version}"
|
spec_version = "#{active_spec.version}#{active_spec.git_version}"
|
||||||
spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
|
if Bundler.ui.debug?
|
||||||
|
loaded_from = loaded_from_for(active_spec)
|
||||||
|
spec_version += " (from #{loaded_from})" if loaded_from
|
||||||
|
end
|
||||||
current_version = "#{current_spec.version}#{current_spec.git_version}"
|
current_version = "#{current_spec.version}#{current_spec.git_version}"
|
||||||
|
|
||||||
if dependency && dependency.specific?
|
if dependency && dependency.specific?
|
||||||
|
@ -211,7 +220,7 @@ module Bundler
|
||||||
dependency = dependency.requirement if dependency
|
dependency = dependency.requirement if dependency
|
||||||
|
|
||||||
ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
|
ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
|
||||||
ret_val << active_spec.loaded_from.to_s if Bundler.ui.debug?
|
ret_val << loaded_from_for(active_spec).to_s if Bundler.ui.debug?
|
||||||
ret_val
|
ret_val
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ module Bundler
|
||||||
|
|
||||||
def run
|
def run
|
||||||
platforms, ruby_version = Bundler.ui.silence do
|
platforms, ruby_version = Bundler.ui.silence do
|
||||||
locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version
|
locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version.gsub(/p\d+\Z/, "")
|
||||||
gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
|
gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
|
||||||
[Bundler.definition.platforms.map {|p| "* #{p}" },
|
[Bundler.definition.platforms.map {|p| "* #{p}" },
|
||||||
locked_ruby_version || gemfile_ruby_version]
|
locked_ruby_version || gemfile_ruby_version]
|
||||||
|
|
|
@ -70,6 +70,7 @@ module Bundler
|
||||||
@unlock = unlock
|
@unlock = unlock
|
||||||
@optional_groups = optional_groups
|
@optional_groups = optional_groups
|
||||||
@remote = false
|
@remote = false
|
||||||
|
@prefer_local = false
|
||||||
@specs = nil
|
@specs = nil
|
||||||
@ruby_version = ruby_version
|
@ruby_version = ruby_version
|
||||||
@gemfiles = gemfiles
|
@gemfiles = gemfiles
|
||||||
|
@ -170,6 +171,13 @@ module Bundler
|
||||||
resolve
|
resolve
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def resolve_prefering_local!
|
||||||
|
@prefer_local = true
|
||||||
|
@remote = true
|
||||||
|
sources.remote!
|
||||||
|
resolve
|
||||||
|
end
|
||||||
|
|
||||||
def resolve_with_cache!
|
def resolve_with_cache!
|
||||||
sources.cached!
|
sources.cached!
|
||||||
resolve
|
resolve
|
||||||
|
@ -476,6 +484,7 @@ module Bundler
|
||||||
|
|
||||||
def reresolve
|
def reresolve
|
||||||
last_resolve = converge_locked_specs
|
last_resolve = converge_locked_specs
|
||||||
|
remove_ruby_from_platforms_if_necessary!(dependencies)
|
||||||
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, true)
|
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, true)
|
||||||
Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
||||||
end
|
end
|
||||||
|
@ -516,10 +525,8 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
unless specs["bundler"].any?
|
|
||||||
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
|
||||||
specs["bundler"] = bundler
|
specs["bundler"] = bundler
|
||||||
end
|
|
||||||
|
|
||||||
specs
|
specs
|
||||||
end
|
end
|
||||||
|
@ -528,6 +535,19 @@ module Bundler
|
||||||
@remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
@remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def pin_locally_available_names(source_requirements)
|
||||||
|
source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
|
||||||
|
local_source = original_source.dup
|
||||||
|
local_source.local_only!
|
||||||
|
|
||||||
|
new_source_requirements[name] = if local_source.specs.search(name).any?
|
||||||
|
local_source
|
||||||
|
else
|
||||||
|
original_source
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def current_ruby_platform_locked?
|
def current_ruby_platform_locked?
|
||||||
return false unless generic_local_platform == Gem::Platform::RUBY
|
return false unless generic_local_platform == Gem::Platform::RUBY
|
||||||
return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
|
return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)
|
||||||
|
@ -719,17 +739,25 @@ module Bundler
|
||||||
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@specs_that_changed_sources = []
|
||||||
|
|
||||||
specs.each do |s|
|
specs.each do |s|
|
||||||
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
|
||||||
dep = @dependencies.find {|d| s.satisfies?(d) }
|
dep = @dependencies.find {|d| s.satisfies?(d) }
|
||||||
|
|
||||||
s.source = (dep && dep.source) || sources.get(s.source) || sources.default_source
|
# Replace the locked dependency's source with the equivalent source from the Gemfile
|
||||||
|
s.source = if dep && dep.source
|
||||||
|
gemfile_source = dep.source
|
||||||
|
lockfile_source = s.source
|
||||||
|
|
||||||
|
@specs_that_changed_sources << s if gemfile_source != lockfile_source
|
||||||
|
|
||||||
|
gemfile_source
|
||||||
|
else
|
||||||
|
sources.get_with_fallback(s.source)
|
||||||
|
end
|
||||||
|
|
||||||
next if @unlock[:sources].include?(s.source.name)
|
next if @unlock[:sources].include?(s.source.name)
|
||||||
|
|
||||||
# If the spec is from a path source and it doesn't exist anymore
|
|
||||||
# then we unlock it.
|
|
||||||
|
|
||||||
# Path sources have special logic
|
# Path sources have special logic
|
||||||
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
||||||
new_specs = begin
|
new_specs = begin
|
||||||
|
@ -765,7 +793,7 @@ module Bundler
|
||||||
|
|
||||||
def metadata_dependencies
|
def metadata_dependencies
|
||||||
@metadata_dependencies ||= [
|
@metadata_dependencies ||= [
|
||||||
Dependency.new("Ruby\0", RubyVersion.system.gem_version),
|
Dependency.new("Ruby\0", Gem.ruby_version),
|
||||||
Dependency.new("RubyGems\0", Gem::VERSION),
|
Dependency.new("RubyGems\0", Gem::VERSION),
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
@ -792,7 +820,9 @@ module Bundler
|
||||||
# specs will be available later when the resolver knows where to
|
# specs will be available later when the resolver knows where to
|
||||||
# look for that gemspec (or its dependencies)
|
# look for that gemspec (or its dependencies)
|
||||||
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
source_requirements = if precompute_source_requirements_for_indirect_dependencies?
|
||||||
{ :default => sources.default_source }.merge(source_map.all_requirements)
|
all_requirements = source_map.all_requirements
|
||||||
|
all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
|
||||||
|
{ :default => sources.default_source }.merge(all_requirements)
|
||||||
else
|
else
|
||||||
{ :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
{ :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
|
||||||
end
|
end
|
||||||
|
@ -802,9 +832,18 @@ module Bundler
|
||||||
end
|
end
|
||||||
source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
|
source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
|
||||||
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
||||||
|
verify_changed_sources!
|
||||||
source_requirements
|
source_requirements
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def verify_changed_sources!
|
||||||
|
@specs_that_changed_sources.each do |s|
|
||||||
|
if s.source.specs.search(s.name).empty?
|
||||||
|
raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def requested_groups
|
def requested_groups
|
||||||
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
|
||||||
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
|
||||||
|
@ -844,6 +883,17 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def remove_ruby_from_platforms_if_necessary!(dependencies)
|
||||||
|
return if Bundler.frozen_bundle? ||
|
||||||
|
Bundler.local_platform == Gem::Platform::RUBY ||
|
||||||
|
!platforms.include?(Gem::Platform::RUBY) ||
|
||||||
|
(@new_platform && platforms.last == Gem::Platform::RUBY) ||
|
||||||
|
!@originally_locked_specs.incomplete_ruby_specs?(dependencies)
|
||||||
|
|
||||||
|
remove_platform(Gem::Platform::RUBY)
|
||||||
|
add_current_platform
|
||||||
|
end
|
||||||
|
|
||||||
def source_map
|
def source_map
|
||||||
@source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
|
@source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
|
||||||
end
|
end
|
||||||
|
|
|
@ -44,6 +44,12 @@ module Bundler
|
||||||
|
|
||||||
def select_best_platform_match(specs, platform)
|
def select_best_platform_match(specs, platform)
|
||||||
matching = specs.select {|spec| spec.match_platform(platform) }
|
matching = specs.select {|spec| spec.match_platform(platform) }
|
||||||
|
|
||||||
|
sort_best_platform_match(matching, platform)
|
||||||
|
end
|
||||||
|
module_function :select_best_platform_match
|
||||||
|
|
||||||
|
def sort_best_platform_match(matching, platform)
|
||||||
exact = matching.select {|spec| spec.platform == platform }
|
exact = matching.select {|spec| spec.platform == platform }
|
||||||
return exact if exact.any?
|
return exact if exact.any?
|
||||||
|
|
||||||
|
@ -52,7 +58,7 @@ module Bundler
|
||||||
|
|
||||||
sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) }
|
sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) }
|
||||||
end
|
end
|
||||||
module_function :select_best_platform_match
|
module_function :sort_best_platform_match
|
||||||
|
|
||||||
class PlatformMatch
|
class PlatformMatch
|
||||||
def self.specificity_score(spec_platform, user_platform)
|
def self.specificity_score(spec_platform, user_platform)
|
||||||
|
|
12
lib/bundler/incomplete_specification.rb
Normal file
12
lib/bundler/incomplete_specification.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Bundler
|
||||||
|
class IncompleteSpecification
|
||||||
|
attr_reader :name, :platform
|
||||||
|
|
||||||
|
def initialize(name, platform)
|
||||||
|
@name = name
|
||||||
|
@platform = platform
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -268,7 +268,14 @@ module Bundler
|
||||||
return false if @definition.nothing_changed? && !@definition.missing_specs?
|
return false if @definition.nothing_changed? && !@definition.missing_specs?
|
||||||
end
|
end
|
||||||
|
|
||||||
options["local"] ? @definition.resolve_with_cache! : @definition.resolve_remotely!
|
if options["local"]
|
||||||
|
@definition.resolve_with_cache!
|
||||||
|
elsif options["prefer-local"]
|
||||||
|
@definition.resolve_prefering_local!
|
||||||
|
else
|
||||||
|
@definition.resolve_remotely!
|
||||||
|
end
|
||||||
|
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
def bundler_path
|
def bundler_path
|
||||||
Bundler.root.join(Bundler.settings[:path], "bundler")
|
Bundler.root.join(Bundler.settings[:path].to_s, "bundler")
|
||||||
end
|
end
|
||||||
|
|
||||||
def gem_path(path, spec)
|
def gem_path(path, spec)
|
||||||
|
|
|
@ -76,35 +76,35 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
def materialize_for_installation
|
def materialize_for_installation
|
||||||
__materialize__(ruby_platform_materializes_to_ruby_platform? ? platform : Bundler.local_platform)
|
source.local!
|
||||||
|
|
||||||
|
candidates = if source.is_a?(Source::Path) || !ruby_platform_materializes_to_ruby_platform?
|
||||||
|
target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : Bundler.local_platform
|
||||||
|
|
||||||
|
source.specs.search(Dependency.new(name, version)).select do |spec|
|
||||||
|
MatchPlatform.platforms_match?(spec.platform, target_platform)
|
||||||
end
|
end
|
||||||
|
|
||||||
def materialize_for_resolution
|
|
||||||
return self unless Gem::Platform.match_spec?(self)
|
|
||||||
|
|
||||||
__materialize__(platform)
|
|
||||||
end
|
|
||||||
|
|
||||||
def __materialize__(platform)
|
|
||||||
@specification = if source.is_a?(Source::Gemspec) && source.gemspec.name == name
|
|
||||||
source.gemspec.tap {|s| s.source = source }
|
|
||||||
else
|
else
|
||||||
search_object = if source.is_a?(Source::Path)
|
source.specs.search(self)
|
||||||
Dependency.new(name, version)
|
|
||||||
else
|
|
||||||
ruby_platform_materializes_to_ruby_platform? ? self : Dependency.new(name, version)
|
|
||||||
end
|
end
|
||||||
candidates = source.specs.search(search_object)
|
|
||||||
same_platform_candidates = candidates.select do |spec|
|
return self if candidates.empty?
|
||||||
MatchPlatform.platforms_match?(spec.platform, platform)
|
|
||||||
|
__materialize__(candidates)
|
||||||
end
|
end
|
||||||
installable_candidates = same_platform_candidates.select do |spec|
|
|
||||||
|
def __materialize__(candidates)
|
||||||
|
@specification = begin
|
||||||
|
search = candidates.reverse.find do |spec|
|
||||||
spec.is_a?(StubSpecification) ||
|
spec.is_a?(StubSpecification) ||
|
||||||
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
|
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
|
||||||
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
|
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
|
||||||
end
|
end
|
||||||
search = installable_candidates.last || same_platform_candidates.last
|
if search.nil? && Bundler.frozen_bundle?
|
||||||
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
search = candidates.last
|
||||||
|
else
|
||||||
|
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
||||||
|
end
|
||||||
search
|
search
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
\fBbundle cache\fR
|
\fBbundle cache\fR
|
||||||
.
|
.
|
||||||
|
.P
|
||||||
|
alias: \fBpackage\fR, \fBpack\fR
|
||||||
|
.
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running [bundle install(1)][bundle\-install], use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
|
Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running [bundle install(1)][bundle\-install], use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
|
||||||
.
|
.
|
||||||
|
@ -53,3 +56,6 @@ One way to be sure that you have the right platformed versions of all your gems
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
By default, bundle cache(1) \fIbundle\-cache\.1\.html\fR fetches and also installs the gems to the default location\. To package the dependencies to \fBvendor/cache\fR without installing them to the local install location, you can run \fBbundle cache \-\-no\-install\fR\.
|
By default, bundle cache(1) \fIbundle\-cache\.1\.html\fR fetches and also installs the gems to the default location\. To package the dependencies to \fBvendor/cache\fR without installing them to the local install location, you can run \fBbundle cache \-\-no\-install\fR\.
|
||||||
|
.
|
||||||
|
.SH "HISTORY"
|
||||||
|
In Bundler 2\.1, \fBcache\fR took in the functionalities of \fBpackage\fR and now \fBpackage\fR and \fBpack\fR are aliases of \fBcache\fR\.
|
||||||
|
|
|
@ -5,6 +5,8 @@ bundle-cache(1) -- Package your needed `.gem` files into your application
|
||||||
|
|
||||||
`bundle cache`
|
`bundle cache`
|
||||||
|
|
||||||
|
alias: `package`, `pack`
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
|
|
||||||
Copy all of the `.gem` files needed to run the application into the
|
Copy all of the `.gem` files needed to run the application into the
|
||||||
|
@ -70,3 +72,8 @@ By default, [bundle cache(1)](bundle-cache.1.html) fetches and also
|
||||||
installs the gems to the default location. To package the
|
installs the gems to the default location. To package the
|
||||||
dependencies to `vendor/cache` without installing them to the
|
dependencies to `vendor/cache` without installing them to the
|
||||||
local install location, you can run `bundle cache --no-install`.
|
local install location, you can run `bundle cache --no-install`.
|
||||||
|
|
||||||
|
## HISTORY
|
||||||
|
|
||||||
|
In Bundler 2.1, `cache` took in the functionalities of `package` and now
|
||||||
|
`package` and `pack` are aliases of `cache`.
|
||||||
|
|
|
@ -51,7 +51,7 @@ Executing \fBbundle config unset <name>\fR will delete the configuration in both
|
||||||
Executing \fBbundle config unset \-\-global <name>\fR will delete the configuration only from the user configuration\.
|
Executing \fBbundle config unset \-\-global <name>\fR will delete the configuration only from the user configuration\.
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
Executing \fBbundle config unset \-\-local <name> <value>\fR will delete the configuration only from the local application\.
|
Executing \fBbundle config unset \-\-local <name>\fR will delete the configuration only from the local application\.
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
|
Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
|
||||||
|
@ -298,7 +298,7 @@ The following is a list of all configuration keys and their purpose\. You can le
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
In general, you should set these settings per\-application by using the applicable flag to the bundle install(1) \fIbundle\-install\.1\.html\fR or bundle package(1) \fIbundle\-package\.1\.html\fR command\.
|
In general, you should set these settings per\-application by using the applicable flag to the bundle install(1) \fIbundle\-install\.1\.html\fR or bundle cache(1) \fIbundle\-cache\.1\.html\fR command\.
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
You can set them globally either via environment variables or \fBbundle config\fR, whichever is preferable for your setup\. If you use both, environment variables will take preference over global settings\.
|
You can set them globally either via environment variables or \fBbundle config\fR, whichever is preferable for your setup\. If you use both, environment variables will take preference over global settings\.
|
||||||
|
|
|
@ -43,8 +43,8 @@ local and global sources.
|
||||||
Executing `bundle config unset --global <name>` will delete the configuration
|
Executing `bundle config unset --global <name>` will delete the configuration
|
||||||
only from the user configuration.
|
only from the user configuration.
|
||||||
|
|
||||||
Executing `bundle config unset --local <name> <value>` will delete the
|
Executing `bundle config unset --local <name>` will delete the configuration
|
||||||
configuration only from the local application.
|
only from the local application.
|
||||||
|
|
||||||
Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
|
Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
|
||||||
cause it to ignore all configuration.
|
cause it to ignore all configuration.
|
||||||
|
@ -280,7 +280,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
|
||||||
A `:`-separated list of groups whose gems bundler should not install.
|
A `:`-separated list of groups whose gems bundler should not install.
|
||||||
|
|
||||||
In general, you should set these settings per-application by using the applicable
|
In general, you should set these settings per-application by using the applicable
|
||||||
flag to the [bundle install(1)](bundle-install.1.html) or [bundle package(1)](bundle-package.1.html) command.
|
flag to the [bundle install(1)](bundle-install.1.html) or [bundle cache(1)](bundle-cache.1.html) command.
|
||||||
|
|
||||||
You can set them globally either via environment variables or `bundle config`,
|
You can set them globally either via environment variables or `bundle config`,
|
||||||
whichever is preferable for your setup. If you use both, environment variables
|
whichever is preferable for your setup. If you use both, environment variables
|
||||||
|
|
|
@ -70,6 +70,10 @@ The maximum number of parallel download and install jobs\. The default is the nu
|
||||||
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems\' cache or in \fBvendor/cache\fR\. Note that if an appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
|
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems\' cache or in \fBvendor/cache\fR\. Note that if an appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-\-prefer\-local\fR
|
||||||
|
Force using locally installed gems, or gems already present in Rubygems\' cache or in \fBvendor/cache\fR, when resolving, even if newer versions are available remotely\. Only attempt to connect to \fBrubygems\.org\fR for gems that are not present locally\.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
\fB\-\-no\-cache\fR
|
\fB\-\-no\-cache\fR
|
||||||
Do not update the cache in \fBvendor/cache\fR with the newly bundled gems\. This does not remove any gems in the cache but keeps the newly bundled gems from being cached during the install\.
|
Do not update the cache in \fBvendor/cache\fR with the newly bundled gems\. This does not remove any gems in the cache but keeps the newly bundled gems from being cached during the install\.
|
||||||
.
|
.
|
||||||
|
|
|
@ -109,6 +109,12 @@ automatically and that requires `bundler` to silently remember them. Since
|
||||||
appropriate platform-specific gem exists on `rubygems.org` it will not be
|
appropriate platform-specific gem exists on `rubygems.org` it will not be
|
||||||
found.
|
found.
|
||||||
|
|
||||||
|
* `--prefer-local`:
|
||||||
|
Force using locally installed gems, or gems already present in Rubygems' cache
|
||||||
|
or in `vendor/cache`, when resolving, even if newer versions are available
|
||||||
|
remotely. Only attempt to connect to `rubygems.org` for gems that are not
|
||||||
|
present locally.
|
||||||
|
|
||||||
* `--no-cache`:
|
* `--no-cache`:
|
||||||
Do not update the cache in `vendor/cache` with the newly bundled gems. This
|
Do not update the cache in `vendor/cache` with the newly bundled gems. This
|
||||||
does not remove any gems in the cache but keeps the newly bundled gems from
|
does not remove any gems in the cache but keeps the newly bundled gems from
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
\fBbundle platform\fR [\-\-ruby]
|
\fBbundle platform\fR [\-\-ruby]
|
||||||
.
|
.
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
\fBplatform\fR will display information from your Gemfile, Gemfile\.lock, and Ruby VM about your platform\.
|
\fBplatform\fR displays information from your Gemfile, Gemfile\.lock, and Ruby VM about your platform\.
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
For instance, using this Gemfile(5):
|
For instance, using this Gemfile(5):
|
||||||
|
@ -21,7 +21,7 @@ For instance, using this Gemfile(5):
|
||||||
|
|
||||||
source "https://rubygems\.org"
|
source "https://rubygems\.org"
|
||||||
|
|
||||||
ruby "1\.9\.3"
|
ruby "3\.1\.2"
|
||||||
|
|
||||||
gem "rack"
|
gem "rack"
|
||||||
.
|
.
|
||||||
|
@ -30,7 +30,7 @@ gem "rack"
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
If you run \fBbundle platform\fR on Ruby 1\.9\.3, it will display the following output:
|
If you run \fBbundle platform\fR on Ruby 3\.1\.2, it displays the following output:
|
||||||
.
|
.
|
||||||
.IP "" 4
|
.IP "" 4
|
||||||
.
|
.
|
||||||
|
@ -39,10 +39,13 @@ If you run \fBbundle platform\fR on Ruby 1\.9\.3, it will display the following
|
||||||
Your platform is: x86_64\-linux
|
Your platform is: x86_64\-linux
|
||||||
|
|
||||||
Your app has gems that work on these platforms:
|
Your app has gems that work on these platforms:
|
||||||
|
* arm64\-darwin\-21
|
||||||
* ruby
|
* ruby
|
||||||
|
* x64\-mingw\-ucrt
|
||||||
|
* x86_64\-linux
|
||||||
|
|
||||||
Your Gemfile specifies a Ruby version requirement:
|
Your Gemfile specifies a Ruby version requirement:
|
||||||
* ruby 1\.9\.3
|
* ruby 3\.1\.2
|
||||||
|
|
||||||
Your current platform satisfies the Ruby version requirement\.
|
Your current platform satisfies the Ruby version requirement\.
|
||||||
.
|
.
|
||||||
|
@ -51,11 +54,18 @@ Your current platform satisfies the Ruby version requirement\.
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\fBplatform\fR will list all the platforms in your \fBGemfile\.lock\fR as well as the \fBruby\fR directive if applicable from your Gemfile(5)\. It will also let you know if the \fBruby\fR directive requirement has been met\. If \fBruby\fR directive doesn\'t match the running Ruby VM, it will tell you what part does not\.
|
\fBplatform\fR lists all the platforms in your \fBGemfile\.lock\fR as well as the \fBruby\fR directive if applicable from your Gemfile(5)\. It also lets you know if the \fBruby\fR directive requirement has been met\. If \fBruby\fR directive doesn\'t match the running Ruby VM, it tells you what part does not\.
|
||||||
.
|
.
|
||||||
.SH "OPTIONS"
|
.SH "OPTIONS"
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fB\-\-ruby\fR
|
\fB\-\-ruby\fR
|
||||||
It will display the ruby directive information, so you don\'t have to parse it from the Gemfile(5)\.
|
It will display the ruby directive information, so you don\'t have to parse it from the Gemfile(5)\.
|
||||||
|
.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.
|
||||||
|
.IP "\(bu" 4
|
||||||
|
bundle\-lock(1) \fIbundle\-lock\.1\.ronn\fR
|
||||||
|
.
|
||||||
|
.IP "" 0
|
||||||
|
|
||||||
|
|
|
@ -7,36 +7,43 @@ bundle-platform(1) -- Displays platform compatibility information
|
||||||
|
|
||||||
## DESCRIPTION
|
## DESCRIPTION
|
||||||
|
|
||||||
`platform` will display information from your Gemfile, Gemfile.lock, and Ruby
|
`platform` displays information from your Gemfile, Gemfile.lock, and Ruby
|
||||||
VM about your platform.
|
VM about your platform.
|
||||||
|
|
||||||
For instance, using this Gemfile(5):
|
For instance, using this Gemfile(5):
|
||||||
|
|
||||||
source "https://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
ruby "1.9.3"
|
ruby "3.1.2"
|
||||||
|
|
||||||
gem "rack"
|
gem "rack"
|
||||||
|
|
||||||
If you run `bundle platform` on Ruby 1.9.3, it will display the following output:
|
If you run `bundle platform` on Ruby 3.1.2, it displays the following output:
|
||||||
|
|
||||||
Your platform is: x86_64-linux
|
Your platform is: x86_64-linux
|
||||||
|
|
||||||
Your app has gems that work on these platforms:
|
Your app has gems that work on these platforms:
|
||||||
|
* arm64-darwin-21
|
||||||
* ruby
|
* ruby
|
||||||
|
* x64-mingw-ucrt
|
||||||
|
* x86_64-linux
|
||||||
|
|
||||||
Your Gemfile specifies a Ruby version requirement:
|
Your Gemfile specifies a Ruby version requirement:
|
||||||
* ruby 1.9.3
|
* ruby 3.1.2
|
||||||
|
|
||||||
Your current platform satisfies the Ruby version requirement.
|
Your current platform satisfies the Ruby version requirement.
|
||||||
|
|
||||||
`platform` will list all the platforms in your `Gemfile.lock` as well as the
|
`platform` lists all the platforms in your `Gemfile.lock` as well as the
|
||||||
`ruby` directive if applicable from your Gemfile(5). It will also let you know
|
`ruby` directive if applicable from your Gemfile(5). It also lets you know
|
||||||
if the `ruby` directive requirement has been met. If `ruby` directive doesn't
|
if the `ruby` directive requirement has been met. If `ruby` directive doesn't
|
||||||
match the running Ruby VM, it will tell you what part does not.
|
match the running Ruby VM, it tells you what part does not.
|
||||||
|
|
||||||
## OPTIONS
|
## OPTIONS
|
||||||
|
|
||||||
* `--ruby`:
|
* `--ruby`:
|
||||||
It will display the ruby directive information, so you don't have to
|
It will display the ruby directive information, so you don't have to
|
||||||
parse it from the Gemfile(5).
|
parse it from the Gemfile(5).
|
||||||
|
|
||||||
|
## SEE ALSO
|
||||||
|
|
||||||
|
* [bundle-lock(1)](bundle-lock.1.ronn)
|
||||||
|
|
|
@ -43,8 +43,8 @@ Install the gems specified by the \fBGemfile\fR or \fBGemfile\.lock\fR
|
||||||
Update dependencies to their latest versions
|
Update dependencies to their latest versions
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBbundle package(1)\fR \fIbundle\-package\.1\.html\fR
|
\fBbundle cache(1)\fR \fIbundle\-cache\.1\.html\fR
|
||||||
Package the \.gem files required by your application into the \fBvendor/cache\fR directory
|
Package the \.gem files required by your application into the \fBvendor/cache\fR directory (aliases: \fBbundle package\fR, \fBbundle pack\fR)
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBbundle exec(1)\fR \fIbundle\-exec\.1\.html\fR
|
\fBbundle exec(1)\fR \fIbundle\-exec\.1\.html\fR
|
||||||
|
@ -81,7 +81,7 @@ Show the source location of a particular gem in the bundle
|
||||||
Show all of the outdated gems in the current bundle
|
Show all of the outdated gems in the current bundle
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBbundle console(1)\fR
|
\fBbundle console(1)\fR (deprecated)
|
||||||
Start an IRB session in the current bundle
|
Start an IRB session in the current bundle
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
@ -127,9 +127,6 @@ When running a command that isn\'t listed in PRIMARY COMMANDS or UTILITIES, Bund
|
||||||
These commands are obsolete and should no longer be used:
|
These commands are obsolete and should no longer be used:
|
||||||
.
|
.
|
||||||
.IP "\(bu" 4
|
.IP "\(bu" 4
|
||||||
\fBbundle cache(1)\fR
|
|
||||||
.
|
|
||||||
.IP "\(bu" 4
|
|
||||||
\fBbundle inject(1)\fR
|
\fBbundle inject(1)\fR
|
||||||
.
|
.
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
|
|
|
@ -36,9 +36,9 @@ We divide `bundle` subcommands into primary commands and utilities:
|
||||||
* [`bundle update(1)`](bundle-update.1.html):
|
* [`bundle update(1)`](bundle-update.1.html):
|
||||||
Update dependencies to their latest versions
|
Update dependencies to their latest versions
|
||||||
|
|
||||||
* [`bundle package(1)`](bundle-package.1.html):
|
* [`bundle cache(1)`](bundle-cache.1.html):
|
||||||
Package the .gem files required by your application into the
|
Package the .gem files required by your application into the
|
||||||
`vendor/cache` directory
|
`vendor/cache` directory (aliases: `bundle package`, `bundle pack`)
|
||||||
|
|
||||||
* [`bundle exec(1)`](bundle-exec.1.html):
|
* [`bundle exec(1)`](bundle-exec.1.html):
|
||||||
Execute a script in the current bundle
|
Execute a script in the current bundle
|
||||||
|
@ -67,7 +67,7 @@ We divide `bundle` subcommands into primary commands and utilities:
|
||||||
* [`bundle outdated(1)`](bundle-outdated.1.html):
|
* [`bundle outdated(1)`](bundle-outdated.1.html):
|
||||||
Show all of the outdated gems in the current bundle
|
Show all of the outdated gems in the current bundle
|
||||||
|
|
||||||
* `bundle console(1)`:
|
* `bundle console(1)` (deprecated):
|
||||||
Start an IRB session in the current bundle
|
Start an IRB session in the current bundle
|
||||||
|
|
||||||
* [`bundle open(1)`](bundle-open.1.html):
|
* [`bundle open(1)`](bundle-open.1.html):
|
||||||
|
@ -107,5 +107,4 @@ and execute it, passing down any extra arguments to it.
|
||||||
|
|
||||||
These commands are obsolete and should no longer be used:
|
These commands are obsolete and should no longer be used:
|
||||||
|
|
||||||
* `bundle cache(1)`
|
|
||||||
* `bundle inject(1)`
|
* `bundle inject(1)`
|
||||||
|
|
|
@ -28,10 +28,11 @@ module Bundler
|
||||||
def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms, metadata_requirements)
|
def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms, metadata_requirements)
|
||||||
@source_requirements = source_requirements
|
@source_requirements = source_requirements
|
||||||
@metadata_requirements = metadata_requirements
|
@metadata_requirements = metadata_requirements
|
||||||
|
@base = base
|
||||||
@resolver = Molinillo::Resolver.new(self, self)
|
@resolver = Molinillo::Resolver.new(self, self)
|
||||||
@search_for = {}
|
@search_for = {}
|
||||||
@base_dg = Molinillo::DependencyGraph.new
|
@base_dg = Molinillo::DependencyGraph.new
|
||||||
@base = base.materialized_for_resolution do |ls|
|
base.each do |ls|
|
||||||
dep = Dependency.new(ls.name, ls.version)
|
dep = Dependency.new(ls.name, ls.version)
|
||||||
@base_dg.add_vertex(ls.name, DepProxy.get_proxy(dep, ls.platform), true)
|
@base_dg.add_vertex(ls.name, DepProxy.get_proxy(dep, ls.platform), true)
|
||||||
end
|
end
|
||||||
|
|
|
@ -32,12 +32,12 @@ module Bundler
|
||||||
@engine = engine && engine.to_s || "ruby"
|
@engine = engine && engine.to_s || "ruby"
|
||||||
@engine_versions = (engine_version && Array(engine_version)) || @versions
|
@engine_versions = (engine_version && Array(engine_version)) || @versions
|
||||||
@engine_gem_version = Gem::Requirement.create(@engine_versions.first).requirements.first.last
|
@engine_gem_version = Gem::Requirement.create(@engine_versions.first).requirements.first.last
|
||||||
@patchlevel = patchlevel
|
@patchlevel = patchlevel || (@gem_version.prerelease? ? "-1" : nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s(versions = self.versions)
|
def to_s(versions = self.versions)
|
||||||
output = String.new("ruby #{versions_string(versions)}")
|
output = String.new("ruby #{versions_string(versions)}")
|
||||||
output << "p#{patchlevel}" if patchlevel
|
output << "p#{patchlevel}" if patchlevel && patchlevel != "-1"
|
||||||
output << " (#{engine} #{versions_string(engine_versions)})" unless engine == "ruby"
|
output << " (#{engine} #{versions_string(engine_versions)})" unless engine == "ruby"
|
||||||
|
|
||||||
output
|
output
|
||||||
|
@ -46,7 +46,7 @@ module Bundler
|
||||||
# @private
|
# @private
|
||||||
PATTERN = /
|
PATTERN = /
|
||||||
ruby\s
|
ruby\s
|
||||||
([\d.]+) # ruby version
|
(\d+\.\d+\.\d+(?:\.\S+)?) # ruby version
|
||||||
(?:p(-?\d+))? # optional patchlevel
|
(?:p(-?\d+))? # optional patchlevel
|
||||||
(?:\s\((\S+)\s(.+)\))? # optional engine info
|
(?:\s\((\S+)\s(.+)\))? # optional engine info
|
||||||
/xo.freeze
|
/xo.freeze
|
||||||
|
@ -103,8 +103,8 @@ module Bundler
|
||||||
|
|
||||||
def self.system
|
def self.system
|
||||||
ruby_engine = RUBY_ENGINE.dup
|
ruby_engine = RUBY_ENGINE.dup
|
||||||
ruby_version = RUBY_VERSION.dup
|
ruby_version = Gem.ruby_version.to_s
|
||||||
ruby_engine_version = RUBY_ENGINE_VERSION.dup
|
ruby_engine_version = RUBY_ENGINE == "ruby" ? ruby_version : RUBY_ENGINE_VERSION.dup
|
||||||
patchlevel = RUBY_PATCHLEVEL.to_s
|
patchlevel = RUBY_PATCHLEVEL.to_s
|
||||||
|
|
||||||
@ruby_version ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
|
@ruby_version ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
|
||||||
|
|
|
@ -17,6 +17,15 @@ require "rubygems/source"
|
||||||
|
|
||||||
require_relative "match_platform"
|
require_relative "match_platform"
|
||||||
|
|
||||||
|
# Cherry-pick fixes to `Gem.ruby_version` to be useful for modern Bundler
|
||||||
|
# versions and ignore patchlevels
|
||||||
|
# (https://github.com/rubygems/rubygems/pull/5472,
|
||||||
|
# https://github.com/rubygems/rubygems/pull/5486). May be removed once RubyGems
|
||||||
|
# 3.3.12 support is dropped.
|
||||||
|
unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
|
||||||
|
Gem.instance_variable_set(:@ruby_version, Gem::Version.new(RUBY_VERSION))
|
||||||
|
end
|
||||||
|
|
||||||
module Gem
|
module Gem
|
||||||
class Specification
|
class Specification
|
||||||
include ::Bundler::MatchPlatform
|
include ::Bundler::MatchPlatform
|
||||||
|
@ -146,6 +155,10 @@ module Gem
|
||||||
|
|
||||||
alias_method :eql?, :==
|
alias_method :eql?, :==
|
||||||
|
|
||||||
|
def force_ruby_platform
|
||||||
|
false
|
||||||
|
end
|
||||||
|
|
||||||
def encode_with(coder)
|
def encode_with(coder)
|
||||||
to_yaml_properties.each do |ivar|
|
to_yaml_properties.each do |ivar|
|
||||||
coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
|
coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
|
||||||
|
|
|
@ -5,7 +5,7 @@ module Bundler
|
||||||
class Metadata < Source
|
class Metadata < Source
|
||||||
def specs
|
def specs
|
||||||
@specs ||= Index.build do |idx|
|
@specs ||= Index.build do |idx|
|
||||||
idx << Gem::Specification.new("Ruby\0", RubyVersion.system.gem_version)
|
idx << Gem::Specification.new("Ruby\0", Gem.ruby_version)
|
||||||
idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
|
idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
|
||||||
s.required_rubygems_version = Gem::Requirement.default
|
s.required_rubygems_version = Gem::Requirement.default
|
||||||
end
|
end
|
||||||
|
|
|
@ -101,6 +101,10 @@ module Bundler
|
||||||
source_list_for(source).find {|s| equivalent_source?(source, s) }
|
source_list_for(source).find {|s| equivalent_source?(source, s) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_with_fallback(source)
|
||||||
|
get(source) || default_source
|
||||||
|
end
|
||||||
|
|
||||||
def lock_sources
|
def lock_sources
|
||||||
lock_other_sources + lock_rubygems_sources
|
lock_other_sources + lock_rubygems_sources
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,14 +13,16 @@ module Bundler
|
||||||
|
|
||||||
def for(dependencies, check = false, platforms = [nil])
|
def for(dependencies, check = false, platforms = [nil])
|
||||||
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
|
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
|
||||||
deps = dependencies.product(platforms).map {|dep, platform| [dep.name, platform && dep.force_ruby_platform ? Gem::Platform::RUBY : platform] }
|
deps = dependencies.product(platforms)
|
||||||
specs = []
|
specs = []
|
||||||
|
|
||||||
loop do
|
loop do
|
||||||
break unless dep = deps.shift
|
break unless dep = deps.shift
|
||||||
next if handled.key?(dep)
|
|
||||||
|
|
||||||
handled[dep] = true
|
key = [dep[0].name, dep[1]]
|
||||||
|
next if handled.key?(key)
|
||||||
|
|
||||||
|
handled[key] = true
|
||||||
|
|
||||||
specs_for_dep = specs_for_dependency(*dep)
|
specs_for_dep = specs_for_dependency(*dep)
|
||||||
if specs_for_dep.any?
|
if specs_for_dep.any?
|
||||||
|
@ -28,17 +30,13 @@ module Bundler
|
||||||
|
|
||||||
specs_for_dep.first.dependencies.each do |d|
|
specs_for_dep.first.dependencies.each do |d|
|
||||||
next if d.type == :development
|
next if d.type == :development
|
||||||
deps << [d.name, dep[1]]
|
deps << [d, dep[1]]
|
||||||
end
|
end
|
||||||
elsif check
|
elsif check
|
||||||
specs << IncompleteSpecification.new(*dep)
|
specs << IncompleteSpecification.new(*key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if spec = lookup["bundler"].first
|
|
||||||
specs << spec
|
|
||||||
end
|
|
||||||
|
|
||||||
specs
|
specs
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -66,13 +64,8 @@ module Bundler
|
||||||
end
|
end
|
||||||
|
|
||||||
def materialize(deps)
|
def materialize(deps)
|
||||||
materialized = self.for(deps, true).uniq
|
materialized = self.for(deps, true)
|
||||||
|
|
||||||
materialized.map! do |s|
|
|
||||||
next s unless s.is_a?(LazySpecification)
|
|
||||||
s.source.local!
|
|
||||||
s.materialize_for_installation || s
|
|
||||||
end
|
|
||||||
SpecSet.new(materialized)
|
SpecSet.new(materialized)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -82,7 +75,6 @@ module Bundler
|
||||||
def materialized_for_all_platforms
|
def materialized_for_all_platforms
|
||||||
@specs.map do |s|
|
@specs.map do |s|
|
||||||
next s unless s.is_a?(LazySpecification)
|
next s unless s.is_a?(LazySpecification)
|
||||||
s.source.local!
|
|
||||||
s.source.remote!
|
s.source.remote!
|
||||||
spec = s.materialize_for_installation
|
spec = s.materialize_for_installation
|
||||||
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
||||||
|
@ -90,13 +82,8 @@ module Bundler
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def materialized_for_resolution
|
def incomplete_ruby_specs?(deps)
|
||||||
materialized = @specs.map do |s|
|
self.class.new(self.for(deps, true, [Gem::Platform::RUBY])).incomplete_specs.any?
|
||||||
spec = s.materialize_for_resolution
|
|
||||||
yield spec if spec
|
|
||||||
spec
|
|
||||||
end.compact
|
|
||||||
SpecSet.new(materialized)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def missing_specs
|
def missing_specs
|
||||||
|
@ -181,13 +168,13 @@ module Bundler
|
||||||
@specs.sort_by(&:name).each {|s| yield s }
|
@specs.sort_by(&:name).each {|s| yield s }
|
||||||
end
|
end
|
||||||
|
|
||||||
def specs_for_dependency(name, platform)
|
def specs_for_dependency(dep, platform)
|
||||||
specs_for_name = lookup[name]
|
specs_for_name = lookup[dep.name]
|
||||||
if platform.nil?
|
if platform.nil?
|
||||||
GemHelpers.select_best_platform_match(specs_for_name.select {|s| Gem::Platform.match_spec?(s) }, Bundler.local_platform)
|
matching_specs = specs_for_name.map {|s| s.materialize_for_installation if Gem::Platform.match_spec?(s) }.compact
|
||||||
|
GemHelpers.sort_best_platform_match(matching_specs, Bundler.local_platform)
|
||||||
else
|
else
|
||||||
specs_for_name_and_platform = GemHelpers.select_best_platform_match(specs_for_name, platform)
|
GemHelpers.select_best_platform_match(specs_for_name, dep.force_ruby_platform ? Gem::Platform::RUBY : platform)
|
||||||
specs_for_name_and_platform.any? ? specs_for_name_and_platform : specs_for_name
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: false
|
# frozen_string_literal: false
|
||||||
|
|
||||||
module Bundler
|
module Bundler
|
||||||
VERSION = "2.3.19".freeze
|
VERSION = "2.3.20".freeze
|
||||||
|
|
||||||
def self.bundler_major_version
|
def self.bundler_major_version
|
||||||
@bundler_major_version ||= VERSION.split(".").first.to_i
|
@bundler_major_version ||= VERSION.split(".").first.to_i
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
require "rbconfig"
|
require "rbconfig"
|
||||||
|
|
||||||
module Gem
|
module Gem
|
||||||
VERSION = "3.3.19".freeze
|
VERSION = "3.3.20".freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
# Must be first since it unloads the prelude from 1.9.2
|
# Must be first since it unloads the prelude from 1.9.2
|
||||||
|
@ -741,8 +741,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
def self.prefix
|
def self.prefix
|
||||||
prefix = File.dirname RUBYGEMS_DIR
|
prefix = File.dirname RUBYGEMS_DIR
|
||||||
|
|
||||||
if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) and
|
if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) &&
|
||||||
prefix != File.expand_path(RbConfig::CONFIG["libdir"]) and
|
prefix != File.expand_path(RbConfig::CONFIG["libdir"]) &&
|
||||||
"lib" == File.basename(RUBYGEMS_DIR)
|
"lib" == File.basename(RUBYGEMS_DIR)
|
||||||
prefix
|
prefix
|
||||||
end
|
end
|
||||||
|
@ -845,8 +845,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
# Returns the latest release version of RubyGems.
|
# Returns the latest release version of RubyGems.
|
||||||
|
|
||||||
def self.latest_rubygems_version
|
def self.latest_rubygems_version
|
||||||
latest_version_for("rubygems-update") or
|
latest_version_for("rubygems-update") ||
|
||||||
raise "Can't find 'rubygems-update' in any repo. Check `gem source list`."
|
raise("Can't find 'rubygems-update' in any repo. Check `gem source list`.")
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -854,7 +854,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
|
|
||||||
def self.latest_version_for(name)
|
def self.latest_version_for(name)
|
||||||
spec = latest_spec_for name
|
spec = latest_spec_for name
|
||||||
spec and spec.version
|
spec && spec.version
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -944,7 +944,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
||||||
".rb",
|
".rb",
|
||||||
*%w[DLEXT DLEXT2].map do |key|
|
*%w[DLEXT DLEXT2].map do |key|
|
||||||
val = RbConfig::CONFIG[key]
|
val = RbConfig::CONFIG[key]
|
||||||
next unless val and not val.empty?
|
next unless val && !val.empty?
|
||||||
".#{val}"
|
".#{val}"
|
||||||
end,
|
end,
|
||||||
].compact.uniq
|
].compact.uniq
|
||||||
|
|
|
@ -26,7 +26,7 @@ class Gem::AvailableSet
|
||||||
s = o.set
|
s = o.set
|
||||||
when Array
|
when Array
|
||||||
s = o.map do |sp,so|
|
s = o.map do |sp,so|
|
||||||
if !sp.kind_of?(Gem::Specification) or !so.kind_of?(Gem::Source)
|
if !sp.kind_of?(Gem::Specification) || !so.kind_of?(Gem::Source)
|
||||||
raise TypeError, "Array must be in [[spec, source], ...] form"
|
raise TypeError, "Array must be in [[spec, source], ...] form"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -149,8 +149,8 @@ class Gem::AvailableSet
|
||||||
@set.reject! do |t|
|
@set.reject! do |t|
|
||||||
# already locally installed
|
# already locally installed
|
||||||
Gem::Specification.any? do |installed_spec|
|
Gem::Specification.any? do |installed_spec|
|
||||||
dep.name == installed_spec.name and
|
dep.name == installed_spec.name &&
|
||||||
dep.requirement.satisfied_by? installed_spec.version
|
dep.requirement.satisfied_by?(installed_spec.version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ class Gem::BasicSpecification
|
||||||
# default Ruby platform.
|
# default Ruby platform.
|
||||||
|
|
||||||
def full_name
|
def full_name
|
||||||
if platform == Gem::Platform::RUBY or platform.nil?
|
if platform == Gem::Platform::RUBY || platform.nil?
|
||||||
"#{name}-#{version}".dup.tap(&Gem::UNTAINT)
|
"#{name}-#{version}".dup.tap(&Gem::UNTAINT)
|
||||||
else
|
else
|
||||||
"#{name}-#{version}-#{platform}".dup.tap(&Gem::UNTAINT)
|
"#{name}-#{version}-#{platform}".dup.tap(&Gem::UNTAINT)
|
||||||
|
|
|
@ -159,11 +159,11 @@ class Gem::Command
|
||||||
gem = "'#{gem_name}' (#{version})"
|
gem = "'#{gem_name}' (#{version})"
|
||||||
msg = String.new "Could not find a valid gem #{gem}"
|
msg = String.new "Could not find a valid gem #{gem}"
|
||||||
|
|
||||||
if errors and !errors.empty?
|
if errors && !errors.empty?
|
||||||
msg << ", here is why:\n"
|
msg << ", here is why:\n"
|
||||||
errors.each {|x| msg << " #{x.wordy}\n" }
|
errors.each {|x| msg << " #{x.wordy}\n" }
|
||||||
else
|
else
|
||||||
if required_by and gem != required_by
|
if required_by && gem != required_by
|
||||||
msg << " (required by #{required_by}) in any repository"
|
msg << " (required by #{required_by}) in any repository"
|
||||||
else
|
else
|
||||||
msg << " in any repository"
|
msg << " in any repository"
|
||||||
|
@ -186,7 +186,7 @@ class Gem::Command
|
||||||
def get_all_gem_names
|
def get_all_gem_names
|
||||||
args = options[:args]
|
args = options[:args]
|
||||||
|
|
||||||
if args.nil? or args.empty?
|
if args.nil? || args.empty?
|
||||||
raise Gem::CommandLineError,
|
raise Gem::CommandLineError,
|
||||||
"Please specify at least one gem name (e.g. gem build GEMNAME)"
|
"Please specify at least one gem name (e.g. gem build GEMNAME)"
|
||||||
end
|
end
|
||||||
|
@ -216,7 +216,7 @@ class Gem::Command
|
||||||
def get_one_gem_name
|
def get_one_gem_name
|
||||||
args = options[:args]
|
args = options[:args]
|
||||||
|
|
||||||
if args.nil? or args.empty?
|
if args.nil? || args.empty?
|
||||||
raise Gem::CommandLineError,
|
raise Gem::CommandLineError,
|
||||||
"Please specify a gem name on the command line (e.g. gem build GEMNAME)"
|
"Please specify a gem name on the command line (e.g. gem build GEMNAME)"
|
||||||
end
|
end
|
||||||
|
@ -554,7 +554,7 @@ class Gem::Command
|
||||||
end
|
end
|
||||||
|
|
||||||
def configure_options(header, option_list)
|
def configure_options(header, option_list)
|
||||||
return if option_list.nil? or option_list.empty?
|
return if option_list.nil? || option_list.empty?
|
||||||
|
|
||||||
header = header.to_s.empty? ? "" : "#{header} "
|
header = header.to_s.empty? ? "" : "#{header} "
|
||||||
@parser.separator " #{header}Options:"
|
@parser.separator " #{header}Options:"
|
||||||
|
@ -586,7 +586,7 @@ class Gem::Command
|
||||||
add_common_option("-V", "--[no-]verbose",
|
add_common_option("-V", "--[no-]verbose",
|
||||||
"Set the verbose level of output") do |value, options|
|
"Set the verbose level of output") do |value, options|
|
||||||
# Set us to "really verbose" so the progress meter works
|
# Set us to "really verbose" so the progress meter works
|
||||||
if Gem.configuration.verbose and value
|
if Gem.configuration.verbose && value
|
||||||
Gem.configuration.verbose = 1
|
Gem.configuration.verbose = 1
|
||||||
else
|
else
|
||||||
Gem.configuration.verbose = value
|
Gem.configuration.verbose = value
|
||||||
|
|
|
@ -149,7 +149,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
||||||
@primary_gems = {}
|
@primary_gems = {}
|
||||||
|
|
||||||
Gem::Specification.each do |spec|
|
Gem::Specification.each do |spec|
|
||||||
if @primary_gems[spec.name].nil? or
|
if @primary_gems[spec.name].nil? ||
|
||||||
@primary_gems[spec.name].version < spec.version
|
@primary_gems[spec.name].version < spec.version
|
||||||
@primary_gems[spec.name] = spec
|
@primary_gems[spec.name] = spec
|
||||||
end
|
end
|
||||||
|
|
|
@ -77,7 +77,7 @@ prefix or only the files that are requireable.
|
||||||
gem_contents name
|
gem_contents name
|
||||||
end
|
end
|
||||||
|
|
||||||
terminate_interaction 1 unless found or names.length > 1
|
terminate_interaction 1 unless found || names.length > 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ use with other commands.
|
||||||
name_matches = name_pattern ? name_pattern =~ spec.name : true
|
name_matches = name_pattern ? name_pattern =~ spec.name : true
|
||||||
version_matches = requirement.satisfied_by?(spec.version)
|
version_matches = requirement.satisfied_by?(spec.version)
|
||||||
|
|
||||||
name_matches and version_matches
|
name_matches && version_matches
|
||||||
}.map(&:to_spec)
|
}.map(&:to_spec)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ use with other commands.
|
||||||
end
|
end
|
||||||
|
|
||||||
def ensure_local_only_reverse_dependencies # :nodoc:
|
def ensure_local_only_reverse_dependencies # :nodoc:
|
||||||
if options[:reverse_dependencies] and remote? and not local?
|
if options[:reverse_dependencies] && remote? && !local?
|
||||||
alert_error "Only reverse dependencies for local gems are supported."
|
alert_error "Only reverse dependencies for local gems are supported."
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
|
@ -182,7 +182,7 @@ use with other commands.
|
||||||
sp.dependencies.each do |dep|
|
sp.dependencies.each do |dep|
|
||||||
dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep
|
dep = Gem::Dependency.new(*dep) unless Gem::Dependency === dep
|
||||||
|
|
||||||
if spec.name == dep.name and
|
if spec.name == dep.name &&
|
||||||
dep.requirement.satisfied_by?(spec.version)
|
dep.requirement.satisfied_by?(spec.version)
|
||||||
result << [sp.full_name, dep]
|
result << [sp.full_name, dep]
|
||||||
end
|
end
|
||||||
|
@ -197,7 +197,7 @@ use with other commands.
|
||||||
def name_pattern(args)
|
def name_pattern(args)
|
||||||
return if args.empty?
|
return if args.empty?
|
||||||
|
|
||||||
if args.length == 1 and args.first =~ /\A(.*)(i)?\z/m
|
if args.length == 1 && args.first =~ /\A(.*)(i)?\z/m
|
||||||
flags = $2 ? Regexp::IGNORECASE : nil
|
flags = $2 ? Regexp::IGNORECASE : nil
|
||||||
Regexp.new $1, flags
|
Regexp.new $1, flags
|
||||||
else
|
else
|
||||||
|
|
|
@ -52,7 +52,7 @@ then repackaging it.
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_version # :nodoc:
|
def check_version # :nodoc:
|
||||||
if options[:version] != Gem::Requirement.default and
|
if options[:version] != Gem::Requirement.default &&
|
||||||
get_all_gem_names.size > 1
|
get_all_gem_names.size > 1
|
||||||
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
||||||
" version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
" version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
||||||
|
|
|
@ -68,8 +68,8 @@ Marshal::MINOR_VERSION constants. It is used to ensure compatibility.
|
||||||
# This is always true because it's the only way now.
|
# This is always true because it's the only way now.
|
||||||
options[:build_modern] = true
|
options[:build_modern] = true
|
||||||
|
|
||||||
if not File.exist?(options[:directory]) or
|
if !File.exist?(options[:directory]) ||
|
||||||
not File.directory?(options[:directory])
|
!File.directory?(options[:directory])
|
||||||
alert_error "unknown directory name #{options[:directory]}."
|
alert_error "unknown directory name #{options[:directory]}."
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
else
|
else
|
||||||
|
|
|
@ -134,14 +134,14 @@ You can use `i` command instead of `install`.
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_install_dir # :nodoc:
|
def check_install_dir # :nodoc:
|
||||||
if options[:install_dir] and options[:user_install]
|
if options[:install_dir] && options[:user_install]
|
||||||
alert_error "Use --install-dir or --user-install but not both"
|
alert_error "Use --install-dir or --user-install but not both"
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_version # :nodoc:
|
def check_version # :nodoc:
|
||||||
if options[:version] != Gem::Requirement.default and
|
if options[:version] != Gem::Requirement.default &&
|
||||||
get_all_gem_names.size > 1
|
get_all_gem_names.size > 1
|
||||||
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
||||||
" version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
" version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
||||||
|
@ -191,8 +191,8 @@ You can use `i` command instead of `install`.
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_gem(name, version) # :nodoc:
|
def install_gem(name, version) # :nodoc:
|
||||||
return if options[:conservative] and
|
return if options[:conservative] &&
|
||||||
not Gem::Dependency.new(name, version).matching_specs.empty?
|
!Gem::Dependency.new(name, version).matching_specs.empty?
|
||||||
|
|
||||||
req = Gem::Requirement.create(version)
|
req = Gem::Requirement.create(version)
|
||||||
|
|
||||||
|
|
|
@ -102,10 +102,10 @@ extensions will be restored.
|
||||||
|
|
||||||
# `--extensions` must be explicitly given to pristine only gems
|
# `--extensions` must be explicitly given to pristine only gems
|
||||||
# with extensions.
|
# with extensions.
|
||||||
elsif options[:extensions_set] and
|
elsif options[:extensions_set] &&
|
||||||
options[:extensions] and options[:args].empty?
|
options[:extensions] && options[:args].empty?
|
||||||
Gem::Specification.select do |spec|
|
Gem::Specification.select do |spec|
|
||||||
spec.extensions and not spec.extensions.empty?
|
spec.extensions && !spec.extensions.empty?
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
get_all_gem_names.sort.map do |gem_name|
|
get_all_gem_names.sort.map do |gem_name|
|
||||||
|
@ -135,14 +135,14 @@ extensions will be restored.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
unless spec.extensions.empty? or options[:extensions] or options[:only_executables] or options[:only_plugins]
|
unless spec.extensions.empty? || options[:extensions] || options[:only_executables] || options[:only_plugins]
|
||||||
say "Skipped #{spec.full_name}, it needs to compile an extension"
|
say "Skipped #{spec.full_name}, it needs to compile an extension"
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
gem = spec.cache_file
|
gem = spec.cache_file
|
||||||
|
|
||||||
unless File.exist? gem or options[:only_executables] or options[:only_plugins]
|
unless File.exist?(gem) || options[:only_executables] || options[:only_plugins]
|
||||||
require_relative "../remote_fetcher"
|
require_relative "../remote_fetcher"
|
||||||
|
|
||||||
say "Cached gem for #{spec.full_name} not found, attempting to fetch..."
|
say "Cached gem for #{spec.full_name} not found, attempting to fetch..."
|
||||||
|
|
|
@ -329,9 +329,9 @@ By default, this RubyGems will install gem as:
|
||||||
# ignore
|
# ignore
|
||||||
end
|
end
|
||||||
|
|
||||||
if File.writable? gem_doc_dir and
|
if File.writable?(gem_doc_dir) &&
|
||||||
(not File.exist? rubygems_doc_dir or
|
(!File.exist?(rubygems_doc_dir) ||
|
||||||
File.writable? rubygems_doc_dir)
|
File.writable?(rubygems_doc_dir))
|
||||||
say "Removing old RubyGems RDoc and ri" if @verbose
|
say "Removing old RubyGems RDoc and ri" if @verbose
|
||||||
Dir[File.join(Gem.dir, "doc", "rubygems-[0-9]*")].each do |dir|
|
Dir[File.join(Gem.dir, "doc", "rubygems-[0-9]*")].each do |dir|
|
||||||
rm_rf dir
|
rm_rf dir
|
||||||
|
@ -559,7 +559,7 @@ abort "#{deprecation_message}"
|
||||||
|
|
||||||
history_string = ""
|
history_string = ""
|
||||||
|
|
||||||
until versions.length == 0 or
|
until versions.length == 0 ||
|
||||||
versions.shift <= options[:previous_version] do
|
versions.shift <= options[:previous_version] do
|
||||||
history_string += version_lines.shift + text.shift
|
history_string += version_lines.shift + text.shift
|
||||||
end
|
end
|
||||||
|
|
|
@ -82,7 +82,7 @@ Do you want to add this source?
|
||||||
def check_rubygems_https(source_uri) # :nodoc:
|
def check_rubygems_https(source_uri) # :nodoc:
|
||||||
uri = URI source_uri
|
uri = URI source_uri
|
||||||
|
|
||||||
if uri.scheme and uri.scheme.downcase == "http" and
|
if uri.scheme && uri.scheme.downcase == "http" &&
|
||||||
uri.host.downcase == "rubygems.org"
|
uri.host.downcase == "rubygems.org"
|
||||||
question = <<-QUESTION.chomp
|
question = <<-QUESTION.chomp
|
||||||
https://rubygems.org is recommended for security over #{uri}
|
https://rubygems.org is recommended for security over #{uri}
|
||||||
|
@ -215,9 +215,9 @@ To remove a source use the --remove argument:
|
||||||
def remove_cache_file(desc, path) # :nodoc:
|
def remove_cache_file(desc, path) # :nodoc:
|
||||||
FileUtils.rm_rf path
|
FileUtils.rm_rf path
|
||||||
|
|
||||||
if not File.exist?(path)
|
if !File.exist?(path)
|
||||||
say "*** Removed #{desc} source cache ***"
|
say "*** Removed #{desc} source cache ***"
|
||||||
elsif not File.writable?(path)
|
elsif !File.writable?(path)
|
||||||
say "*** Unable to remove #{desc} source cache (write protected) ***"
|
say "*** Unable to remove #{desc} source cache (write protected) ***"
|
||||||
else
|
else
|
||||||
say "*** Unable to remove #{desc} source cache ***"
|
say "*** Unable to remove #{desc} source cache ***"
|
||||||
|
|
|
@ -88,7 +88,7 @@ Specific fields in the specification can be extracted in YAML format:
|
||||||
raise Gem::CommandLineError, "Unsupported version type: '#{v}'"
|
raise Gem::CommandLineError, "Unsupported version type: '#{v}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
if !req.none? and options[:all]
|
if !req.none? && options[:all]
|
||||||
alert_error "Specify --all or -v, not both"
|
alert_error "Specify --all or -v, not both"
|
||||||
terminate_interaction 1
|
terminate_interaction 1
|
||||||
end
|
end
|
||||||
|
@ -102,7 +102,7 @@ Specific fields in the specification can be extracted in YAML format:
|
||||||
field = get_one_optional_argument
|
field = get_one_optional_argument
|
||||||
|
|
||||||
raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if
|
raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if
|
||||||
field and options[:format] == :ruby
|
field && options[:format] == :ruby
|
||||||
|
|
||||||
if local?
|
if local?
|
||||||
if File.exist? gem
|
if File.exist? gem
|
||||||
|
|
|
@ -114,7 +114,7 @@ that is a dependency of an existing gem. You can use the
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_version # :nodoc:
|
def check_version # :nodoc:
|
||||||
if options[:version] != Gem::Requirement.default and
|
if options[:version] != Gem::Requirement.default &&
|
||||||
get_all_gem_names.size > 1
|
get_all_gem_names.size > 1
|
||||||
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
||||||
" version requirements using `gem uninstall 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
" version requirements using `gem uninstall 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
||||||
|
@ -125,7 +125,7 @@ that is a dependency of an existing gem. You can use the
|
||||||
def execute
|
def execute
|
||||||
check_version
|
check_version
|
||||||
|
|
||||||
if options[:all] and not options[:args].empty?
|
if options[:all] && !options[:args].empty?
|
||||||
uninstall_specific
|
uninstall_specific
|
||||||
elsif options[:all]
|
elsif options[:all]
|
||||||
uninstall_all
|
uninstall_all
|
||||||
|
|
|
@ -155,7 +155,7 @@ command to remove old versions.
|
||||||
Gem::Specification.dirs = Gem.user_dir if options[:user_install]
|
Gem::Specification.dirs = Gem.user_dir if options[:user_install]
|
||||||
|
|
||||||
Gem::Specification.each do |spec|
|
Gem::Specification.each do |spec|
|
||||||
if hig[spec.name].nil? or hig[spec.name].version < spec.version
|
if hig[spec.name].nil? || hig[spec.name].version < spec.version
|
||||||
hig[spec.name] = spec
|
hig[spec.name] = spec
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -292,7 +292,7 @@ command to remove old versions.
|
||||||
args << "--no-document" unless options[:document].include?("rdoc") || options[:document].include?("ri")
|
args << "--no-document" unless options[:document].include?("rdoc") || options[:document].include?("ri")
|
||||||
args << "--no-format-executable" if options[:no_format_executable]
|
args << "--no-format-executable" if options[:no_format_executable]
|
||||||
args << "--previous-version" << Gem::VERSION if
|
args << "--previous-version" << Gem::VERSION if
|
||||||
options[:system] == true or
|
options[:system] == true ||
|
||||||
Gem::Version.new(options[:system]) >= Gem::Version.new(2)
|
Gem::Version.new(options[:system]) >= Gem::Version.new(2)
|
||||||
args
|
args
|
||||||
end
|
end
|
||||||
|
@ -301,7 +301,7 @@ command to remove old versions.
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
highest_installed_gems.each do |l_name, l_spec|
|
highest_installed_gems.each do |l_name, l_spec|
|
||||||
next if not gem_names.empty? and
|
next if !gem_names.empty? &&
|
||||||
gem_names.none? {|name| name == l_spec.name }
|
gem_names.none? {|name| name == l_spec.name }
|
||||||
|
|
||||||
highest_remote_tup = highest_remote_name_tuple l_spec
|
highest_remote_tup = highest_remote_name_tuple l_spec
|
||||||
|
|
|
@ -71,7 +71,7 @@ requiring to see why it does not behave as you expect.
|
||||||
dirs.each do |dir|
|
dirs.each do |dir|
|
||||||
Gem.suffixes.each do |ext|
|
Gem.suffixes.each do |ext|
|
||||||
full_path = File.join dir, "#{package_name}#{ext}"
|
full_path = File.join dir, "#{package_name}#{ext}"
|
||||||
if File.exist? full_path and not File.directory? full_path
|
if File.exist?(full_path) && !File.directory?(full_path)
|
||||||
result << full_path
|
result << full_path
|
||||||
return result unless options[:show_all]
|
return result unless options[:show_all]
|
||||||
end
|
end
|
||||||
|
|
|
@ -39,7 +39,7 @@ require "rbconfig"
|
||||||
class Gem::ConfigFile
|
class Gem::ConfigFile
|
||||||
include Gem::UserInteraction
|
include Gem::UserInteraction
|
||||||
|
|
||||||
DEFAULT_BACKTRACE = false
|
DEFAULT_BACKTRACE = true
|
||||||
DEFAULT_BULK_THRESHOLD = 1000
|
DEFAULT_BULK_THRESHOLD = 1000
|
||||||
DEFAULT_VERBOSITY = true
|
DEFAULT_VERBOSITY = true
|
||||||
DEFAULT_UPDATE_SOURCES = true
|
DEFAULT_UPDATE_SOURCES = true
|
||||||
|
@ -368,7 +368,7 @@ if you believe they were disclosed to a third party.
|
||||||
|
|
||||||
# True if the backtrace option has been specified, or debug is on.
|
# True if the backtrace option has been specified, or debug is on.
|
||||||
def backtrace
|
def backtrace
|
||||||
@backtrace or $DEBUG
|
@backtrace || $DEBUG
|
||||||
end
|
end
|
||||||
|
|
||||||
# The name of the configuration file.
|
# The name of the configuration file.
|
||||||
|
@ -477,11 +477,11 @@ if you believe they were disclosed to a third party.
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@backtrace == other.backtrace and
|
@backtrace == other.backtrace &&
|
||||||
@bulk_threshold == other.bulk_threshold and
|
@bulk_threshold == other.bulk_threshold &&
|
||||||
@verbose == other.verbose and
|
@verbose == other.verbose &&
|
||||||
@update_sources == other.update_sources and
|
@update_sources == other.update_sources &&
|
||||||
@hash == other.hash
|
@hash == other.hash
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ if RUBY_VERSION >= "2.5" && !Gem::KERNEL_WARN_IGNORES_INTERNAL_ENTRIES
|
||||||
start += 1
|
start += 1
|
||||||
|
|
||||||
if path = loc.path
|
if path = loc.path
|
||||||
unless path.start_with?(rubygems_path) or path.start_with?("<internal:")
|
unless path.start_with?(rubygems_path) || path.start_with?("<internal:")
|
||||||
# Non-rubygems frames
|
# Non-rubygems frames
|
||||||
uplevel -= 1
|
uplevel -= 1
|
||||||
end
|
end
|
||||||
|
|
|
@ -161,7 +161,7 @@ module Gem
|
||||||
path = []
|
path = []
|
||||||
path << user_dir if user_home && File.exist?(user_home)
|
path << user_dir if user_home && File.exist?(user_home)
|
||||||
path << default_dir
|
path << default_dir
|
||||||
path << vendor_dir if vendor_dir and File.directory? vendor_dir
|
path << vendor_dir if vendor_dir && File.directory?(vendor_dir)
|
||||||
path
|
path
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ class Gem::Dependency
|
||||||
# What does this dependency require?
|
# What does this dependency require?
|
||||||
|
|
||||||
def requirement
|
def requirement
|
||||||
return @requirement if defined?(@requirement) and @requirement
|
return @requirement if defined?(@requirement) && @requirement
|
||||||
|
|
||||||
# @version_requirements and @version_requirement are legacy ivar
|
# @version_requirements and @version_requirement are legacy ivar
|
||||||
# names, and supported here because older gems need to keep
|
# names, and supported here because older gems need to keep
|
||||||
|
@ -230,10 +230,10 @@ class Gem::Dependency
|
||||||
|
|
||||||
version = Gem::Version.new version
|
version = Gem::Version.new version
|
||||||
|
|
||||||
return true if requirement.none? and not version.prerelease?
|
return true if requirement.none? && !version.prerelease?
|
||||||
return false if version.prerelease? and
|
return false if version.prerelease? &&
|
||||||
not allow_prerelease and
|
!allow_prerelease &&
|
||||||
not prerelease?
|
!prerelease?
|
||||||
|
|
||||||
requirement.satisfied_by? version
|
requirement.satisfied_by? version
|
||||||
end
|
end
|
||||||
|
|
|
@ -109,7 +109,7 @@ class Gem::DependencyInstaller
|
||||||
# gems should be considered.
|
# gems should be considered.
|
||||||
|
|
||||||
def consider_local?
|
def consider_local?
|
||||||
@domain == :both or @domain == :local
|
@domain == :both || @domain == :local
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -117,7 +117,7 @@ class Gem::DependencyInstaller
|
||||||
# gems should be considered.
|
# gems should be considered.
|
||||||
|
|
||||||
def consider_remote?
|
def consider_remote?
|
||||||
@domain == :both or @domain == :remote
|
@domain == :both || @domain == :remote
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -197,7 +197,7 @@ class Gem::DependencyInstaller
|
||||||
|
|
||||||
def in_background(what) # :nodoc:
|
def in_background(what) # :nodoc:
|
||||||
fork_happened = false
|
fork_happened = false
|
||||||
if @build_docs_in_background and Process.respond_to?(:fork)
|
if @build_docs_in_background && Process.respond_to?(:fork)
|
||||||
begin
|
begin
|
||||||
Process.fork do
|
Process.fork do
|
||||||
yield
|
yield
|
||||||
|
@ -268,7 +268,7 @@ class Gem::DependencyInstaller
|
||||||
end
|
end
|
||||||
|
|
||||||
def install_development_deps # :nodoc:
|
def install_development_deps # :nodoc:
|
||||||
if @development and @dev_shallow
|
if @development && @dev_shallow
|
||||||
:shallow
|
:shallow
|
||||||
elsif @development
|
elsif @development
|
||||||
:all
|
:all
|
||||||
|
@ -289,7 +289,7 @@ class Gem::DependencyInstaller
|
||||||
installer_set.force = @force
|
installer_set.force = @force
|
||||||
|
|
||||||
if consider_local?
|
if consider_local?
|
||||||
if dep_or_name =~ /\.gem$/ and File.file? dep_or_name
|
if dep_or_name =~ /\.gem$/ && File.file?(dep_or_name)
|
||||||
src = Gem::Source::SpecificFile.new dep_or_name
|
src = Gem::Source::SpecificFile.new dep_or_name
|
||||||
installer_set.add_local dep_or_name, src.spec, src
|
installer_set.add_local dep_or_name, src.spec, src
|
||||||
version = src.spec.version if version == Gem::Requirement.default
|
version = src.spec.version if version == Gem::Requirement.default
|
||||||
|
|
|
@ -119,11 +119,11 @@ class Gem::DependencyList
|
||||||
each do |spec|
|
each do |spec|
|
||||||
spec.runtime_dependencies.each do |dep|
|
spec.runtime_dependencies.each do |dep|
|
||||||
inst = Gem::Specification.any? do |installed_spec|
|
inst = Gem::Specification.any? do |installed_spec|
|
||||||
dep.name == installed_spec.name and
|
dep.name == installed_spec.name &&
|
||||||
dep.requirement.satisfied_by? installed_spec.version
|
dep.requirement.satisfied_by?(installed_spec.version)
|
||||||
end
|
end
|
||||||
|
|
||||||
unless inst or @specs.find {|s| s.satisfies_requirement? dep }
|
unless inst || @specs.find {|s| s.satisfies_requirement? dep }
|
||||||
unsatisfied[spec.name] << dep
|
unsatisfied[spec.name] << dep
|
||||||
return unsatisfied if quick
|
return unsatisfied if quick
|
||||||
end
|
end
|
||||||
|
@ -175,7 +175,7 @@ class Gem::DependencyList
|
||||||
def remove_specs_unsatisfied_by(dependencies)
|
def remove_specs_unsatisfied_by(dependencies)
|
||||||
specs.reject! do |spec|
|
specs.reject! do |spec|
|
||||||
dep = dependencies[spec.name]
|
dep = dependencies[spec.name]
|
||||||
dep and not dep.requirement.satisfied_by? spec.version
|
dep && !dep.requirement.satisfied_by?(spec.version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ class Gem::Doctor
|
||||||
# Are we doctoring a gem repository?
|
# Are we doctoring a gem repository?
|
||||||
|
|
||||||
def gem_repository?
|
def gem_repository?
|
||||||
not installed_specs.empty?
|
!installed_specs.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -111,8 +111,8 @@ class Gem::Doctor
|
||||||
basename = File.basename(child, extension)
|
basename = File.basename(child, extension)
|
||||||
next if installed_specs.include? basename
|
next if installed_specs.include? basename
|
||||||
next if /^rubygems-\d/ =~ basename
|
next if /^rubygems-\d/ =~ basename
|
||||||
next if "specifications" == sub_directory and "default" == basename
|
next if "specifications" == sub_directory && "default" == basename
|
||||||
next if "plugins" == sub_directory and Gem.plugin_suffix_regexp =~ basename
|
next if "plugins" == sub_directory && Gem.plugin_suffix_regexp =~ (basename)
|
||||||
|
|
||||||
type = File.directory?(child) ? "directory" : "file"
|
type = File.directory?(child) ? "directory" : "file"
|
||||||
|
|
||||||
|
|
|
@ -254,7 +254,7 @@ class Gem::UnsatisfiableDependencyError < Gem::DependencyError
|
||||||
# Gem::Resolver::DependencyRequest +dep+
|
# Gem::Resolver::DependencyRequest +dep+
|
||||||
|
|
||||||
def initialize(dep, platform_mismatch=nil)
|
def initialize(dep, platform_mismatch=nil)
|
||||||
if platform_mismatch and !platform_mismatch.empty?
|
if platform_mismatch && !platform_mismatch.empty?
|
||||||
plats = platform_mismatch.map {|x| x.platform.to_s }.sort.uniq
|
plats = platform_mismatch.map {|x| x.platform.to_s }.sort.uniq
|
||||||
super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(', ')}"
|
super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(', ')}"
|
||||||
else
|
else
|
||||||
|
|
|
@ -44,7 +44,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
||||||
full_tmp_dest = File.join(extension_dir, tmp_dest_relative)
|
full_tmp_dest = File.join(extension_dir, tmp_dest_relative)
|
||||||
|
|
||||||
# TODO remove in RubyGems 4
|
# TODO remove in RubyGems 4
|
||||||
if Gem.install_extension_in_lib and lib_dir
|
if Gem.install_extension_in_lib && lib_dir
|
||||||
FileUtils.mkdir_p lib_dir
|
FileUtils.mkdir_p lib_dir
|
||||||
entries = Dir.entries(full_tmp_dest) - %w[. ..]
|
entries = Dir.entries(full_tmp_dest) - %w[. ..]
|
||||||
entries = entries.map {|entry| File.join full_tmp_dest, entry }
|
entries = entries.map {|entry| File.join full_tmp_dest, entry }
|
||||||
|
@ -53,7 +53,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
||||||
|
|
||||||
FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
|
FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
|
||||||
destent = ent.class.new(dest_path, ent.rel)
|
destent = ent.class.new(dest_path, ent.rel)
|
||||||
destent.exist? or FileUtils.mv(ent.path, destent.path)
|
destent.exist? || FileUtils.mv(ent.path, destent.path)
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
ENV["DESTDIR"] = destdir
|
ENV["DESTDIR"] = destdir
|
||||||
|
|
|
@ -71,7 +71,7 @@ module Gem::GemcutterUtilities
|
||||||
begin
|
begin
|
||||||
env_rubygems_host = ENV["RUBYGEMS_HOST"]
|
env_rubygems_host = ENV["RUBYGEMS_HOST"]
|
||||||
env_rubygems_host = nil if
|
env_rubygems_host = nil if
|
||||||
env_rubygems_host and env_rubygems_host.empty?
|
env_rubygems_host && env_rubygems_host.empty?
|
||||||
|
|
||||||
env_rubygems_host || configured_host
|
env_rubygems_host || configured_host
|
||||||
end
|
end
|
||||||
|
|
|
@ -149,7 +149,7 @@ class Gem::Indexer
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
platform = Gem::Platform::RUBY if platform.nil? or platform.empty?
|
platform = Gem::Platform::RUBY if platform.nil? || platform.empty?
|
||||||
[spec.name, spec.version, platform]
|
[spec.name, spec.version, platform]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -296,7 +296,7 @@ class Gem::Indexer
|
||||||
files = @files
|
files = @files
|
||||||
files.delete @quick_marshal_dir if files.include? @quick_dir
|
files.delete @quick_marshal_dir if files.include? @quick_dir
|
||||||
|
|
||||||
if files.include? @quick_marshal_dir and not files.include? @quick_dir
|
if files.include?(@quick_marshal_dir) && !files.include?(@quick_dir)
|
||||||
files.delete @quick_marshal_dir
|
files.delete @quick_marshal_dir
|
||||||
|
|
||||||
dst_name = File.join(@dest_directory, @quick_marshal_dir_base)
|
dst_name = File.join(@dest_directory, @quick_marshal_dir_base)
|
||||||
|
@ -414,7 +414,7 @@ class Gem::Indexer
|
||||||
|
|
||||||
index.each do |spec|
|
index.each do |spec|
|
||||||
platform = spec.original_platform
|
platform = spec.original_platform
|
||||||
platform = Gem::Platform::RUBY if platform.nil? or platform.empty?
|
platform = Gem::Platform::RUBY if platform.nil? || platform.empty?
|
||||||
specs_index << [spec.name, spec.version, platform]
|
specs_index << [spec.name, spec.version, platform]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,7 @@ class Gem::Installer
|
||||||
return if spec.name == existing
|
return if spec.name == existing
|
||||||
|
|
||||||
# somebody has written to RubyGems' directory, overwrite, too bad
|
# somebody has written to RubyGems' directory, overwrite, too bad
|
||||||
return if Gem.default_bindir != @bin_dir and not ruby_executable
|
return if Gem.default_bindir != @bin_dir && !ruby_executable
|
||||||
|
|
||||||
question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
|
question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
|
||||||
|
|
||||||
|
@ -418,10 +418,10 @@ class Gem::Installer
|
||||||
# True if the gems in the system satisfy +dependency+.
|
# True if the gems in the system satisfy +dependency+.
|
||||||
|
|
||||||
def installation_satisfies_dependency?(dependency)
|
def installation_satisfies_dependency?(dependency)
|
||||||
return true if @options[:development] and dependency.type == :development
|
return true if @options[:development] && dependency.type == :development
|
||||||
return true if installed_specs.detect {|s| dependency.matches_spec? s }
|
return true if installed_specs.detect {|s| dependency.matches_spec? s }
|
||||||
return false if @only_install_dir
|
return false if @only_install_dir
|
||||||
not dependency.matching_specs.empty?
|
!dependency.matching_specs.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -483,22 +483,14 @@ class Gem::Installer
|
||||||
end
|
end
|
||||||
|
|
||||||
def generate_bin # :nodoc:
|
def generate_bin # :nodoc:
|
||||||
return if spec.executables.nil? or spec.executables.empty?
|
return if spec.executables.nil? || spec.executables.empty?
|
||||||
|
|
||||||
ensure_writable_dir @bin_dir
|
ensure_writable_dir @bin_dir
|
||||||
|
|
||||||
spec.executables.each do |filename|
|
spec.executables.each do |filename|
|
||||||
filename.tap(&Gem::UNTAINT)
|
filename.tap(&Gem::UNTAINT)
|
||||||
bin_path = File.join gem_dir, spec.bindir, filename
|
bin_path = File.join gem_dir, spec.bindir, filename
|
||||||
|
next unless File.exist? bin_path
|
||||||
unless File.exist? bin_path
|
|
||||||
if File.symlink? bin_path
|
|
||||||
alert_warning "`#{bin_path}` is dangling symlink pointing to `#{File.readlink bin_path}`"
|
|
||||||
else
|
|
||||||
alert_warning "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
|
|
||||||
end
|
|
||||||
next
|
|
||||||
end
|
|
||||||
|
|
||||||
mode = File.stat(bin_path).mode
|
mode = File.stat(bin_path).mode
|
||||||
dir_mode = options[:prog_mode] || (mode | 0111)
|
dir_mode = options[:prog_mode] || (mode | 0111)
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Gem::NameTuple
|
||||||
@version = version
|
@version = version
|
||||||
|
|
||||||
unless platform.kind_of? Gem::Platform
|
unless platform.kind_of? Gem::Platform
|
||||||
platform = "ruby" if !platform or platform.empty?
|
platform = "ruby" if !platform || platform.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
@platform = platform
|
@platform = platform
|
||||||
|
@ -102,8 +102,8 @@ class Gem::NameTuple
|
||||||
def ==(other)
|
def ==(other)
|
||||||
case other
|
case other
|
||||||
when self.class
|
when self.class
|
||||||
@name == other.name and
|
@name == other.name &&
|
||||||
@version == other.version and
|
@version == other.version &&
|
||||||
@platform == other.platform
|
@platform == other.platform
|
||||||
when Array
|
when Array
|
||||||
to_a == other
|
to_a == other
|
||||||
|
|
|
@ -409,18 +409,23 @@ EOM
|
||||||
|
|
||||||
def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
|
def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
|
||||||
directories = []
|
directories = []
|
||||||
|
symlinks = []
|
||||||
|
|
||||||
open_tar_gz io do |tar|
|
open_tar_gz io do |tar|
|
||||||
tar.each do |entry|
|
tar.each do |entry|
|
||||||
next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
|
full_name = entry.full_name
|
||||||
|
next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH
|
||||||
|
|
||||||
destination = install_location entry.full_name, destination_dir
|
destination = install_location full_name, destination_dir
|
||||||
|
|
||||||
if entry.symlink?
|
if entry.symlink?
|
||||||
link_target = entry.header.linkname
|
link_target = entry.header.linkname
|
||||||
real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
|
real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
|
||||||
|
|
||||||
raise Gem::Package::SymlinkError.new(entry.full_name, real_destination, destination_dir) unless
|
raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
|
||||||
normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
|
normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
|
||||||
|
|
||||||
|
symlinks << [full_name, link_target, destination, real_destination]
|
||||||
end
|
end
|
||||||
|
|
||||||
FileUtils.rm_rf destination
|
FileUtils.rm_rf destination
|
||||||
|
@ -444,12 +449,18 @@ EOM
|
||||||
FileUtils.chmod file_mode(entry.header.mode), destination
|
FileUtils.chmod file_mode(entry.header.mode), destination
|
||||||
end if entry.file?
|
end if entry.file?
|
||||||
|
|
||||||
File.symlink(entry.header.linkname, destination) if entry.symlink?
|
|
||||||
|
|
||||||
verbose destination
|
verbose destination
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
symlinks.each do |name, target, destination, real_destination|
|
||||||
|
if File.exist?(real_destination)
|
||||||
|
File.symlink(target, destination)
|
||||||
|
else
|
||||||
|
alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if dir_mode
|
if dir_mode
|
||||||
File.chmod(dir_mode, *directories)
|
File.chmod(dir_mode, *directories)
|
||||||
end
|
end
|
||||||
|
@ -676,7 +687,7 @@ EOM
|
||||||
"package content (data.tar.gz) is missing", @gem
|
"package content (data.tar.gz) is missing", @gem
|
||||||
end
|
end
|
||||||
|
|
||||||
if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first) and duplicates.any?
|
if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
|
||||||
raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
|
raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -173,22 +173,22 @@ class Gem::Package::TarHeader
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@checksum == other.checksum and
|
@checksum == other.checksum &&
|
||||||
@devmajor == other.devmajor and
|
@devmajor == other.devmajor &&
|
||||||
@devminor == other.devminor and
|
@devminor == other.devminor &&
|
||||||
@gid == other.gid and
|
@gid == other.gid &&
|
||||||
@gname == other.gname and
|
@gname == other.gname &&
|
||||||
@linkname == other.linkname and
|
@linkname == other.linkname &&
|
||||||
@magic == other.magic and
|
@magic == other.magic &&
|
||||||
@mode == other.mode and
|
@mode == other.mode &&
|
||||||
@mtime == other.mtime and
|
@mtime == other.mtime &&
|
||||||
@name == other.name and
|
@name == other.name &&
|
||||||
@prefix == other.prefix and
|
@prefix == other.prefix &&
|
||||||
@size == other.size and
|
@size == other.size &&
|
||||||
@typeflag == other.typeflag and
|
@typeflag == other.typeflag &&
|
||||||
@uid == other.uid and
|
@uid == other.uid &&
|
||||||
@uname == other.uname and
|
@uname == other.uname &&
|
||||||
@version == other.version
|
@version == other.version
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -314,7 +314,7 @@ class Gem::Package::TarWriter
|
||||||
prefix = parts.join("/")
|
prefix = parts.join("/")
|
||||||
end
|
end
|
||||||
|
|
||||||
if name.bytesize > 100 or prefix.empty?
|
if name.bytesize > 100 || prefix.empty?
|
||||||
raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
|
raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -23,9 +23,9 @@ class Gem::Platform
|
||||||
|
|
||||||
def self.match_platforms?(platform, platforms)
|
def self.match_platforms?(platform, platforms)
|
||||||
platforms.any? do |local_platform|
|
platforms.any? do |local_platform|
|
||||||
platform.nil? or
|
platform.nil? ||
|
||||||
local_platform == platform or
|
local_platform == platform ||
|
||||||
(local_platform != Gem::Platform::RUBY and local_platform =~ platform)
|
(local_platform != Gem::Platform::RUBY && local_platform =~ platform)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
private_class_method :match_platforms?
|
private_class_method :match_platforms?
|
||||||
|
@ -70,7 +70,7 @@ class Gem::Platform
|
||||||
when String then
|
when String then
|
||||||
arch = arch.split "-"
|
arch = arch.split "-"
|
||||||
|
|
||||||
if arch.length > 2 and arch.last !~ /\d/ # reassemble x86-linux-gnu
|
if arch.length > 2 && arch.last !~ (/\d/) # reassemble x86-linux-gnu
|
||||||
extra = arch.pop
|
extra = arch.pop
|
||||||
arch.last << "-#{extra}"
|
arch.last << "-#{extra}"
|
||||||
end
|
end
|
||||||
|
@ -82,7 +82,7 @@ class Gem::Platform
|
||||||
else cpu
|
else cpu
|
||||||
end
|
end
|
||||||
|
|
||||||
if arch.length == 2 and arch.last =~ /^\d+(\.\d+)?$/ # for command-line
|
if arch.length == 2 && arch.last =~ /^\d+(\.\d+)?$/ # for command-line
|
||||||
@os, @version = arch
|
@os, @version = arch
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -107,7 +107,7 @@ class Gem::Platform
|
||||||
when /mingw-?(\w+)?/ then [ "mingw", $1 ]
|
when /mingw-?(\w+)?/ then [ "mingw", $1 ]
|
||||||
when /(mswin\d+)(\_(\d+))?/ then
|
when /(mswin\d+)(\_(\d+))?/ then
|
||||||
os, version = $1, $3
|
os, version = $1, $3
|
||||||
@cpu = "x86" if @cpu.nil? and os =~ /32$/
|
@cpu = "x86" if @cpu.nil? && os =~ /32$/
|
||||||
[os, version]
|
[os, version]
|
||||||
when /netbsdelf/ then [ "netbsdelf", nil ]
|
when /netbsdelf/ then [ "netbsdelf", nil ]
|
||||||
when /openbsd(\d+\.\d+)?/ then [ "openbsd", $1 ]
|
when /openbsd(\d+\.\d+)?/ then [ "openbsd", $1 ]
|
||||||
|
@ -139,7 +139,7 @@ class Gem::Platform
|
||||||
# the same CPU, OS and version.
|
# the same CPU, OS and version.
|
||||||
|
|
||||||
def ==(other)
|
def ==(other)
|
||||||
self.class === other and to_a == other.to_a
|
self.class === other && to_a == other.to_a
|
||||||
end
|
end
|
||||||
|
|
||||||
alias :eql? :==
|
alias :eql? :==
|
||||||
|
@ -160,18 +160,18 @@ class Gem::Platform
|
||||||
return nil unless Gem::Platform === other
|
return nil unless Gem::Platform === other
|
||||||
|
|
||||||
# universal-mingw32 matches x64-mingw-ucrt
|
# universal-mingw32 matches x64-mingw-ucrt
|
||||||
return true if (@cpu == "universal" or other.cpu == "universal") and
|
return true if (@cpu == "universal" || other.cpu == "universal") &&
|
||||||
@os.start_with?("mingw") and other.os.start_with?("mingw")
|
@os.start_with?("mingw") && other.os.start_with?("mingw")
|
||||||
|
|
||||||
# cpu
|
# cpu
|
||||||
([nil,"universal"].include?(@cpu) or [nil, "universal"].include?(other.cpu) or @cpu == other.cpu or
|
([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
|
||||||
(@cpu == "arm" and other.cpu.start_with?("arm"))) and
|
(@cpu == "arm" && other.cpu.start_with?("arm"))) &&
|
||||||
|
|
||||||
# os
|
# os
|
||||||
@os == other.os and
|
@os == other.os &&
|
||||||
|
|
||||||
# version
|
# version
|
||||||
(@version.nil? or other.version.nil? or @version == other.version)
|
(@version.nil? || other.version.nil? || @version == other.version)
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -112,7 +112,7 @@ module Gem::QueryUtils
|
||||||
end
|
end
|
||||||
|
|
||||||
def display_header(type)
|
def display_header(type)
|
||||||
if (ui.outs.tty? and Gem.configuration.verbose) or both?
|
if (ui.outs.tty? && Gem.configuration.verbose) || both?
|
||||||
say
|
say
|
||||||
say "*** #{type} GEMS ***"
|
say "*** #{type} GEMS ***"
|
||||||
say
|
say
|
||||||
|
@ -132,7 +132,7 @@ module Gem::QueryUtils
|
||||||
name_matches = name ? s.name =~ name : true
|
name_matches = name ? s.name =~ name : true
|
||||||
version_matches = show_prereleases? || !s.version.prerelease?
|
version_matches = show_prereleases? || !s.version.prerelease?
|
||||||
|
|
||||||
name_matches and version_matches
|
name_matches && version_matches
|
||||||
end
|
end
|
||||||
|
|
||||||
spec_tuples = specs.map do |spec|
|
spec_tuples = specs.map do |spec|
|
||||||
|
@ -176,7 +176,7 @@ module Gem::QueryUtils
|
||||||
# Check if gem +name+ version +version+ is installed.
|
# Check if gem +name+ version +version+ is installed.
|
||||||
|
|
||||||
def installed?(name, req = Gem::Requirement.default)
|
def installed?(name, req = Gem::Requirement.default)
|
||||||
Gem::Specification.any? {|s| s.name =~ name and req =~ s.version }
|
Gem::Specification.any? {|s| s.name =~ name && req =~ s.version }
|
||||||
end
|
end
|
||||||
|
|
||||||
def output_query_results(spec_tuples)
|
def output_query_results(spec_tuples)
|
||||||
|
@ -242,7 +242,7 @@ module Gem::QueryUtils
|
||||||
return unless options[:versions]
|
return unless options[:versions]
|
||||||
|
|
||||||
list =
|
list =
|
||||||
if platforms.empty? or options[:details]
|
if platforms.empty? || options[:details]
|
||||||
name_tuples.map {|n| n.version }.uniq
|
name_tuples.map {|n| n.version }.uniq
|
||||||
else
|
else
|
||||||
platforms.sort.reverse.map do |version, pls|
|
platforms.sort.reverse.map do |version, pls|
|
||||||
|
@ -289,13 +289,13 @@ module Gem::QueryUtils
|
||||||
end
|
end
|
||||||
|
|
||||||
def spec_homepage(entry, spec)
|
def spec_homepage(entry, spec)
|
||||||
return if spec.homepage.nil? or spec.homepage.empty?
|
return if spec.homepage.nil? || spec.homepage.empty?
|
||||||
|
|
||||||
entry << "\n" << format_text("Homepage: #{spec.homepage}", 68, 4)
|
entry << "\n" << format_text("Homepage: #{spec.homepage}", 68, 4)
|
||||||
end
|
end
|
||||||
|
|
||||||
def spec_license(entry, spec)
|
def spec_license(entry, spec)
|
||||||
return if spec.license.nil? or spec.license.empty?
|
return if spec.license.nil? || spec.license.empty?
|
||||||
|
|
||||||
licenses = "License#{spec.licenses.length > 1 ? 's' : ''}: ".dup
|
licenses = "License#{spec.licenses.length > 1 ? 's' : ''}: ".dup
|
||||||
licenses << spec.licenses.join(", ")
|
licenses << spec.licenses.join(", ")
|
||||||
|
|
|
@ -114,7 +114,7 @@ class Gem::RemoteFetcher
|
||||||
cache_dir =
|
cache_dir =
|
||||||
if Dir.pwd == install_dir # see fetch_command
|
if Dir.pwd == install_dir # see fetch_command
|
||||||
install_dir
|
install_dir
|
||||||
elsif File.writable?(install_cache_dir) || (File.writable?(install_dir) && (not File.exist?(install_cache_dir)))
|
elsif File.writable?(install_cache_dir) || (File.writable?(install_dir) && (!File.exist?(install_cache_dir)))
|
||||||
install_cache_dir
|
install_cache_dir
|
||||||
else
|
else
|
||||||
File.join Gem.user_dir, "cache"
|
File.join Gem.user_dir, "cache"
|
||||||
|
@ -247,7 +247,7 @@ class Gem::RemoteFetcher
|
||||||
|
|
||||||
data = send "fetch_#{uri.scheme}", uri, mtime, head
|
data = send "fetch_#{uri.scheme}", uri, mtime, head
|
||||||
|
|
||||||
if data and !head and uri.to_s.end_with?(".gz")
|
if data && !head && uri.to_s.end_with?(".gz")
|
||||||
begin
|
begin
|
||||||
data = Gem::Util.gunzip data
|
data = Gem::Util.gunzip data
|
||||||
rescue Zlib::GzipFile::Error
|
rescue Zlib::GzipFile::Error
|
||||||
|
@ -288,7 +288,7 @@ class Gem::RemoteFetcher
|
||||||
return Gem.read_binary(path)
|
return Gem.read_binary(path)
|
||||||
end
|
end
|
||||||
|
|
||||||
if update and path
|
if update && path
|
||||||
Gem.write_binary(path, data)
|
Gem.write_binary(path, data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -173,7 +173,7 @@ class Gem::Request
|
||||||
require "uri"
|
require "uri"
|
||||||
uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
|
uri = URI(Gem::UriFormatter.new(env_proxy).normalize)
|
||||||
|
|
||||||
if uri and uri.user.nil? and uri.password.nil?
|
if uri && uri.user.nil? && uri.password.nil?
|
||||||
user = ENV["#{_scheme}_proxy_user"] || ENV["#{_SCHEME}_PROXY_USER"]
|
user = ENV["#{_scheme}_proxy_user"] || ENV["#{_SCHEME}_PROXY_USER"]
|
||||||
password = ENV["#{_scheme}_proxy_pass"] || ENV["#{_SCHEME}_PROXY_PASS"]
|
password = ENV["#{_scheme}_proxy_pass"] || ENV["#{_SCHEME}_PROXY_PASS"]
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ class Gem::Request::ConnectionPools # :nodoc:
|
||||||
def get_no_proxy_from_env
|
def get_no_proxy_from_env
|
||||||
env_no_proxy = ENV["no_proxy"] || ENV["NO_PROXY"]
|
env_no_proxy = ENV["no_proxy"] || ENV["NO_PROXY"]
|
||||||
|
|
||||||
return [] if env_no_proxy.nil? or env_no_proxy.empty?
|
return [] if env_no_proxy.nil? || env_no_proxy.empty?
|
||||||
|
|
||||||
env_no_proxy.split(/\s*,\s*/)
|
env_no_proxy.split(/\s*,\s*/)
|
||||||
end
|
end
|
||||||
|
@ -78,7 +78,7 @@ class Gem::Request::ConnectionPools # :nodoc:
|
||||||
|
|
||||||
no_proxy = get_no_proxy_from_env
|
no_proxy = get_no_proxy_from_env
|
||||||
|
|
||||||
if proxy_uri and not no_proxy?(hostname, no_proxy)
|
if proxy_uri && !no_proxy?(hostname, no_proxy)
|
||||||
proxy_hostname = proxy_uri.respond_to?(:hostname) ? proxy_uri.hostname : proxy_uri.host
|
proxy_hostname = proxy_uri.respond_to?(:hostname) ? proxy_uri.hostname : proxy_uri.host
|
||||||
net_http_args + [
|
net_http_args + [
|
||||||
proxy_hostname,
|
proxy_hostname,
|
||||||
|
|
|
@ -26,7 +26,7 @@ class Gem::Request::HTTPPool # :nodoc:
|
||||||
|
|
||||||
def close_all
|
def close_all
|
||||||
until @queue.empty?
|
until @queue.empty?
|
||||||
if connection = @queue.pop(true) and connection.started?
|
if (connection = @queue.pop(true)) && connection.started?
|
||||||
connection.finish
|
connection.finish
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -443,14 +443,14 @@ class Gem::RequestSet
|
||||||
|
|
||||||
def tsort_each_child(node) # :nodoc:
|
def tsort_each_child(node) # :nodoc:
|
||||||
node.spec.dependencies.each do |dep|
|
node.spec.dependencies.each do |dep|
|
||||||
next if dep.type == :development and not @development
|
next if dep.type == :development && !@development
|
||||||
|
|
||||||
match = @requests.find do |r|
|
match = @requests.find do |r|
|
||||||
dep.match? r.spec.name, r.spec.version, @prerelease
|
dep.match? r.spec.name, r.spec.version, r.spec.is_a?(Gem::Resolver::InstalledSpecification) || @prerelease
|
||||||
end
|
end
|
||||||
|
|
||||||
unless match
|
unless match
|
||||||
next if dep.type == :development and @development_shallow
|
next if dep.type == :development && @development_shallow
|
||||||
next if @soft_missing
|
next if @soft_missing
|
||||||
raise Gem::DependencyError,
|
raise Gem::DependencyError,
|
||||||
"Unresolved dependency found during sorting - #{dep} (requested by #{node.spec.full_name})"
|
"Unresolved dependency found during sorting - #{dep} (requested by #{node.spec.full_name})"
|
||||||
|
|
|
@ -371,7 +371,7 @@ class Gem::RequestSet::GemDependencyAPI
|
||||||
duplicate = @dependencies.include? name
|
duplicate = @dependencies.include? name
|
||||||
|
|
||||||
@dependencies[name] =
|
@dependencies[name] =
|
||||||
if requirements.empty? and not source_set
|
if requirements.empty? && !source_set
|
||||||
Gem::Requirement.default
|
Gem::Requirement.default
|
||||||
elsif source_set
|
elsif source_set
|
||||||
Gem::Requirement.source_set
|
Gem::Requirement.source_set
|
||||||
|
@ -789,7 +789,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
||||||
|
|
||||||
raise ArgumentError,
|
raise ArgumentError,
|
||||||
"You must specify engine_version along with the Ruby engine" if
|
"You must specify engine_version along with the Ruby engine" if
|
||||||
engine and not engine_version
|
engine && !engine_version
|
||||||
|
|
||||||
return true if @installing
|
return true if @installing
|
||||||
|
|
||||||
|
@ -800,7 +800,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
|
||||||
raise Gem::RubyVersionMismatch, message
|
raise Gem::RubyVersionMismatch, message
|
||||||
end
|
end
|
||||||
|
|
||||||
if engine and engine != Gem.ruby_engine
|
if engine && engine != Gem.ruby_engine
|
||||||
message = "Your Ruby engine is #{Gem.ruby_engine}, " +
|
message = "Your Ruby engine is #{Gem.ruby_engine}, " +
|
||||||
"but your #{gem_deps_file} requires #{engine}"
|
"but your #{gem_deps_file} requires #{engine}"
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
when "PLATFORMS" then
|
when "PLATFORMS" then
|
||||||
parse_PLATFORMS
|
parse_PLATFORMS
|
||||||
else
|
else
|
||||||
token = get until @tokens.empty? or peek.first == :section
|
token = get until @tokens.empty? || peek.first == :section
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
raise "BUG: unhandled token #{token.type} (#{token.value.inspect}) at line #{token.line} column #{token.column}"
|
raise "BUG: unhandled token #{token.type} (#{token.value.inspect}) at line #{token.line} column #{token.column}"
|
||||||
|
@ -44,7 +44,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
def get(expected_types = nil, expected_value = nil) # :nodoc:
|
def get(expected_types = nil, expected_value = nil) # :nodoc:
|
||||||
token = @tokens.shift
|
token = @tokens.shift
|
||||||
|
|
||||||
if expected_types and not Array(expected_types).include? token.type
|
if expected_types && !Array(expected_types).include?(token.type)
|
||||||
unget token
|
unget token
|
||||||
|
|
||||||
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
||||||
|
@ -53,7 +53,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
|
raise Gem::RequestSet::Lockfile::ParseError.new message, token.column, token.line, @filename
|
||||||
end
|
end
|
||||||
|
|
||||||
if expected_value and expected_value != token.value
|
if expected_value && expected_value != token.value
|
||||||
unget token
|
unget token
|
||||||
|
|
||||||
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
message = "unexpected token [#{token.type.inspect}, #{token.value.inspect}], " +
|
||||||
|
@ -67,7 +67,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse_DEPENDENCIES # :nodoc:
|
def parse_DEPENDENCIES # :nodoc:
|
||||||
while not @tokens.empty? and :text == peek.type do
|
while !@tokens.empty? && :text == peek.type do
|
||||||
token = get :text
|
token = get :text
|
||||||
|
|
||||||
requirements = []
|
requirements = []
|
||||||
|
@ -127,7 +127,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
set = Gem::Resolver::LockSet.new sources
|
set = Gem::Resolver::LockSet.new sources
|
||||||
last_specs = nil
|
last_specs = nil
|
||||||
|
|
||||||
while not @tokens.empty? and :text == peek.type do
|
while !@tokens.empty? && :text == peek.type do
|
||||||
token = get :text
|
token = get :text
|
||||||
name = token.value
|
name = token.value
|
||||||
column = token.column
|
column = token.column
|
||||||
|
@ -144,7 +144,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
type = token.type
|
type = token.type
|
||||||
data = token.value
|
data = token.value
|
||||||
|
|
||||||
if type == :text and column == 4
|
if type == :text && column == 4
|
||||||
version, platform = data.split "-", 2
|
version, platform = data.split "-", 2
|
||||||
|
|
||||||
platform =
|
platform =
|
||||||
|
@ -183,7 +183,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
|
|
||||||
type = peek.type
|
type = peek.type
|
||||||
value = peek.value
|
value = peek.value
|
||||||
if type == :entry and %w[branch ref tag].include? value
|
if type == :entry && %w[branch ref tag].include?(value)
|
||||||
get
|
get
|
||||||
get :text
|
get :text
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
|
|
||||||
last_spec = nil
|
last_spec = nil
|
||||||
|
|
||||||
while not @tokens.empty? and :text == peek.type do
|
while !@tokens.empty? && :text == peek.type do
|
||||||
token = get :text
|
token = get :text
|
||||||
name = token.value
|
name = token.value
|
||||||
column = token.column
|
column = token.column
|
||||||
|
@ -214,7 +214,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
type = token.type
|
type = token.type
|
||||||
data = token.value
|
data = token.value
|
||||||
|
|
||||||
if type == :text and column == 4
|
if type == :text && column == 4
|
||||||
last_spec = set.add_git_spec name, data, repository, revision, true
|
last_spec = set.add_git_spec name, data, repository, revision, true
|
||||||
else
|
else
|
||||||
dependency = parse_dependency name, data
|
dependency = parse_dependency name, data
|
||||||
|
@ -246,7 +246,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
set = Gem::Resolver::VendorSet.new
|
set = Gem::Resolver::VendorSet.new
|
||||||
last_spec = nil
|
last_spec = nil
|
||||||
|
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while !@tokens.empty? && :text == peek.first do
|
||||||
token = get :text
|
token = get :text
|
||||||
name = token.value
|
name = token.value
|
||||||
column = token.column
|
column = token.column
|
||||||
|
@ -261,7 +261,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
type = token.type
|
type = token.type
|
||||||
data = token.value
|
data = token.value
|
||||||
|
|
||||||
if type == :text and column == 4
|
if type == :text && column == 4
|
||||||
last_spec = set.add_vendor_gem name, directory
|
last_spec = set.add_vendor_gem name, directory
|
||||||
else
|
else
|
||||||
dependency = parse_dependency name, data
|
dependency = parse_dependency name, data
|
||||||
|
@ -281,7 +281,7 @@ class Gem::RequestSet::Lockfile::Parser
|
||||||
end
|
end
|
||||||
|
|
||||||
def parse_PLATFORMS # :nodoc:
|
def parse_PLATFORMS # :nodoc:
|
||||||
while not @tokens.empty? and :text == peek.first do
|
while !@tokens.empty? && :text == peek.first do
|
||||||
name = get(:text).value
|
name = get(:text).value
|
||||||
|
|
||||||
@platforms << name
|
@platforms << name
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# frozen_string_literal: true
|
#) frozen_string_literal: true
|
||||||
require_relative "parser"
|
require_relative "parser"
|
||||||
|
|
||||||
class Gem::RequestSet::Lockfile::Tokenizer
|
class Gem::RequestSet::Lockfile::Tokenizer
|
||||||
|
@ -26,7 +26,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
||||||
end
|
end
|
||||||
|
|
||||||
def skip(type)
|
def skip(type)
|
||||||
@tokens.shift while not @tokens.empty? and peek.type == type
|
@tokens.shift while !@tokens.empty? && peek.type == type
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -253,7 +253,7 @@ class Gem::Requirement
|
||||||
def specific?
|
def specific?
|
||||||
return true if @requirements.length > 1 # GIGO, > 1, > 2 is silly
|
return true if @requirements.length > 1 # GIGO, > 1, > 2 is silly
|
||||||
|
|
||||||
not %w[> >=].include? @requirements.first.first # grab the operator
|
!%w[> >=].include? @requirements.first.first # grab the operator
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s # :nodoc:
|
def to_s # :nodoc:
|
||||||
|
|
|
@ -153,10 +153,10 @@ class Gem::Resolver
|
||||||
s.fetch_development_dependencies if @development
|
s.fetch_development_dependencies if @development
|
||||||
|
|
||||||
s.dependencies.reverse_each do |d|
|
s.dependencies.reverse_each do |d|
|
||||||
next if d.type == :development and not @development
|
next if d.type == :development && !@development
|
||||||
next if d.type == :development and @development_shallow and
|
next if d.type == :development && @development_shallow &&
|
||||||
act.development?
|
act.development?
|
||||||
next if d.type == :development and @development_shallow and
|
next if d.type == :development && @development_shallow &&
|
||||||
act.parent
|
act.parent
|
||||||
|
|
||||||
reqs << Gem::Resolver::DependencyRequest.new(d, act)
|
reqs << Gem::Resolver::DependencyRequest.new(d, act)
|
||||||
|
@ -192,7 +192,7 @@ class Gem::Resolver
|
||||||
conflict = e.conflicts.values.first
|
conflict = e.conflicts.values.first
|
||||||
raise Gem::DependencyResolutionError, Conflict.new(conflict.requirement_trees.first.first, conflict.existing, conflict.requirement)
|
raise Gem::DependencyResolutionError, Conflict.new(conflict.requirement_trees.first.first, conflict.existing, conflict.requirement)
|
||||||
ensure
|
ensure
|
||||||
@output.close if defined?(@output) and !debug?
|
@output.close if defined?(@output) && !debug?
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -40,10 +40,10 @@ class Gem::Resolver::APISpecification < Gem::Resolver::Specification
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@set == other.set and
|
@set == other.set &&
|
||||||
@name == other.name and
|
@name == other.name &&
|
||||||
@version == other.version and
|
@version == other.version &&
|
||||||
@platform == other.platform
|
@platform == other.platform
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_all(req) # :nodoc:
|
def find_all(req) # :nodoc:
|
||||||
pick_sets if @remote and @sets.empty?
|
pick_sets if @remote && @sets.empty?
|
||||||
|
|
||||||
super
|
super
|
||||||
rescue Gem::RemoteFetcher::FetchError => e
|
rescue Gem::RemoteFetcher::FetchError => e
|
||||||
|
@ -35,7 +35,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
||||||
end
|
end
|
||||||
|
|
||||||
def prefetch(reqs) # :nodoc:
|
def prefetch(reqs) # :nodoc:
|
||||||
pick_sets if @remote and @sets.empty?
|
pick_sets if @remote && @sets.empty?
|
||||||
|
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
@ -63,7 +63,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
||||||
uri = uri + "."
|
uri = uri + "."
|
||||||
|
|
||||||
raise error unless api_set = @sets.find do |set|
|
raise error unless api_set = @sets.find do |set|
|
||||||
Gem::Resolver::APISet === set and set.dep_uri == uri
|
Gem::Resolver::APISet === set && set.dep_uri == uri
|
||||||
end
|
end
|
||||||
|
|
||||||
index_set = Gem::Resolver::IndexSet.new api_set.source
|
index_set = Gem::Resolver::IndexSet.new api_set.source
|
||||||
|
|
|
@ -27,9 +27,9 @@ class Gem::Resolver::Conflict
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@dependency == other.dependency and
|
@dependency == other.dependency &&
|
||||||
@activated == other.activated and
|
@activated == other.activated &&
|
||||||
@failed_dep == other.failed_dep
|
@failed_dep == other.failed_dep
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
class Gem::Resolver::GitSpecification < Gem::Resolver::SpecSpecification
|
class Gem::Resolver::GitSpecification < Gem::Resolver::SpecSpecification
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@set == other.set and
|
@set == other.set &&
|
||||||
@spec == other.spec and
|
@spec == other.spec &&
|
||||||
@source == other.source
|
@source == other.source
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,8 @@ class Gem::Resolver::IndexSpecification < Gem::Resolver::Specification
|
||||||
@name = name
|
@name = name
|
||||||
@version = version
|
@version = version
|
||||||
@source = source
|
@source = source
|
||||||
@platform = platform.to_s
|
@platform = Gem::Platform.new(platform.to_s)
|
||||||
|
@original_platform = platform.to_s
|
||||||
|
|
||||||
@spec = nil
|
@spec = nil
|
||||||
end
|
end
|
||||||
|
@ -91,7 +92,7 @@ class Gem::Resolver::IndexSpecification < Gem::Resolver::Specification
|
||||||
def spec # :nodoc:
|
def spec # :nodoc:
|
||||||
@spec ||=
|
@spec ||=
|
||||||
begin
|
begin
|
||||||
tuple = Gem::NameTuple.new @name, @version, @platform
|
tuple = Gem::NameTuple.new @name, @version, @original_platform
|
||||||
|
|
||||||
@source.fetch_spec tuple
|
@source.fetch_spec tuple
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
class Gem::Resolver::InstalledSpecification < Gem::Resolver::SpecSpecification
|
class Gem::Resolver::InstalledSpecification < Gem::Resolver::SpecSpecification
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@set == other.set and
|
@set == other.set &&
|
||||||
@spec == other.spec
|
@spec == other.spec
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -61,13 +61,12 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
||||||
found = find_all request
|
found = find_all request
|
||||||
|
|
||||||
found.delete_if do |s|
|
found.delete_if do |s|
|
||||||
s.version.prerelease? and not s.local?
|
s.version.prerelease? && !s.local?
|
||||||
end unless dependency.prerelease?
|
end unless dependency.prerelease?
|
||||||
|
|
||||||
found = found.select do |s|
|
found = found.select do |s|
|
||||||
Gem::Source::SpecificFile === s.source or
|
Gem::Source::SpecificFile === s.source ||
|
||||||
Gem::Platform::RUBY == s.platform or
|
Gem::Platform.match(s.platform)
|
||||||
Gem::Platform.local === s.platform
|
|
||||||
end
|
end
|
||||||
|
|
||||||
found = found.sort_by do |s|
|
found = found.sort_by do |s|
|
||||||
|
@ -111,14 +110,14 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
||||||
# Should local gems should be considered?
|
# Should local gems should be considered?
|
||||||
|
|
||||||
def consider_local? # :nodoc:
|
def consider_local? # :nodoc:
|
||||||
@domain == :both or @domain == :local
|
@domain == :both || @domain == :local
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
# Should remote gems should be considered?
|
# Should remote gems should be considered?
|
||||||
|
|
||||||
def consider_remote? # :nodoc:
|
def consider_remote? # :nodoc:
|
||||||
@domain == :both or @domain == :remote
|
@domain == :both || @domain == :remote
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -137,7 +136,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
||||||
|
|
||||||
dep = req.dependency
|
dep = req.dependency
|
||||||
|
|
||||||
return res if @ignore_dependencies and
|
return res if @ignore_dependencies &&
|
||||||
@always_install.none? {|spec| dep.match? spec }
|
@always_install.none? {|spec| dep.match? spec }
|
||||||
|
|
||||||
name = dep.name
|
name = dep.name
|
||||||
|
@ -168,10 +167,6 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
res.delete_if do |spec|
|
|
||||||
spec.version.prerelease? and not dep.prerelease?
|
|
||||||
end
|
|
||||||
|
|
||||||
res.concat @remote_set.find_all req if consider_remote?
|
res.concat @remote_set.find_all req if consider_remote?
|
||||||
|
|
||||||
res
|
res
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Gem::Resolver::LockSet < Gem::Resolver::Set
|
||||||
dep = Gem::Dependency.new name, version
|
dep = Gem::Dependency.new name, version
|
||||||
|
|
||||||
found = @specs.find do |spec|
|
found = @specs.find do |spec|
|
||||||
dep.matches_spec? spec and spec.platform == platform
|
dep.matches_spec?(spec) && spec.platform == platform
|
||||||
end
|
end
|
||||||
|
|
||||||
tuple = Gem::NameTuple.new found.name, found.version, found.platform
|
tuple = Gem::NameTuple.new found.name, found.version, found.platform
|
||||||
|
|
|
@ -71,7 +71,7 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
|
||||||
|
|
||||||
def spec
|
def spec
|
||||||
@spec ||= Gem::Specification.find do |spec|
|
@spec ||= Gem::Specification.find do |spec|
|
||||||
spec.name == @name and spec.version == @version
|
spec.name == @name && spec.version == @version
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec ||= Gem::Specification.new do |s|
|
@spec ||= Gem::Specification.new do |s|
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
|
class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and
|
self.class === other &&
|
||||||
@set == other.set and
|
@set == other.set &&
|
||||||
@spec == other.spec and
|
@spec == other.spec &&
|
||||||
@source == other.source
|
@source == other.source
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -618,7 +618,7 @@ module Gem::Security
|
||||||
path = File.expand_path path
|
path = File.expand_path path
|
||||||
|
|
||||||
File.open path, "wb", permissions do |io|
|
File.open path, "wb", permissions do |io|
|
||||||
if passphrase and cipher
|
if passphrase && cipher
|
||||||
io.write pemmable.to_pem cipher, passphrase
|
io.write pemmable.to_pem cipher, passphrase
|
||||||
else
|
else
|
||||||
io.write pemmable.to_pem
|
io.write pemmable.to_pem
|
||||||
|
|
|
@ -88,16 +88,16 @@ class Gem::Security::Policy
|
||||||
|
|
||||||
message = "certificate #{signer.subject}"
|
message = "certificate #{signer.subject}"
|
||||||
|
|
||||||
if not_before = signer.not_before and not_before > time
|
if (not_before = signer.not_before) && not_before > time
|
||||||
raise Gem::Security::Exception,
|
raise Gem::Security::Exception,
|
||||||
"#{message} not valid before #{not_before}"
|
"#{message} not valid before #{not_before}"
|
||||||
end
|
end
|
||||||
|
|
||||||
if not_after = signer.not_after and not_after < time
|
if (not_after = signer.not_after) && not_after < time
|
||||||
raise Gem::Security::Exception, "#{message} not valid after #{not_after}"
|
raise Gem::Security::Exception, "#{message} not valid after #{not_after}"
|
||||||
end
|
end
|
||||||
|
|
||||||
if issuer and not signer.verify issuer.public_key
|
if issuer && !signer.verify(issuer.public_key)
|
||||||
raise Gem::Security::Exception,
|
raise Gem::Security::Exception,
|
||||||
"#{message} was not issued by #{issuer.subject}"
|
"#{message} was not issued by #{issuer.subject}"
|
||||||
end
|
end
|
||||||
|
@ -109,7 +109,7 @@ class Gem::Security::Policy
|
||||||
# Ensures the public key of +key+ matches the public key in +signer+
|
# Ensures the public key of +key+ matches the public key in +signer+
|
||||||
|
|
||||||
def check_key(signer, key)
|
def check_key(signer, key)
|
||||||
unless signer and key
|
unless signer && key
|
||||||
return true unless @only_signed
|
return true unless @only_signed
|
||||||
|
|
||||||
raise Gem::Security::Exception, "missing key or signature"
|
raise Gem::Security::Exception, "missing key or signature"
|
||||||
|
@ -231,7 +231,7 @@ class Gem::Security::Policy
|
||||||
|
|
||||||
if @verify_data
|
if @verify_data
|
||||||
raise Gem::Security::Exception, "no digests provided (probable bug)" if
|
raise Gem::Security::Exception, "no digests provided (probable bug)" if
|
||||||
signer_digests.nil? or signer_digests.empty?
|
signer_digests.nil? || signer_digests.empty?
|
||||||
else
|
else
|
||||||
signer_digests = {}
|
signer_digests = {}
|
||||||
end
|
end
|
||||||
|
@ -248,7 +248,7 @@ class Gem::Security::Policy
|
||||||
|
|
||||||
if @only_trusted
|
if @only_trusted
|
||||||
check_trust chain, digester, trust_dir
|
check_trust chain, digester, trust_dir
|
||||||
elsif signatures.empty? and digests.empty?
|
elsif signatures.empty? && digests.empty?
|
||||||
# trust is irrelevant if there's no signatures to verify
|
# trust is irrelevant if there's no signatures to verify
|
||||||
else
|
else
|
||||||
alert_warning "#{subject signer} is not trusted for #{full_name}"
|
alert_warning "#{subject signer} is not trusted for #{full_name}"
|
||||||
|
|
|
@ -141,7 +141,7 @@ class Gem::Security::Signer
|
||||||
|
|
||||||
raise Gem::Security::Exception, "no certs provided" if @cert_chain.empty?
|
raise Gem::Security::Exception, "no certs provided" if @cert_chain.empty?
|
||||||
|
|
||||||
if @cert_chain.length == 1 and @cert_chain.last.not_after < Time.now
|
if @cert_chain.length == 1 && @cert_chain.last.not_after < Time.now
|
||||||
alert("Your certificate has expired, trying to re-sign it...")
|
alert("Your certificate has expired, trying to re-sign it...")
|
||||||
|
|
||||||
re_sign_key(
|
re_sign_key(
|
||||||
|
|
|
@ -62,7 +62,7 @@ class Gem::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
self.class === other and @uri == other.uri
|
self.class === other && @uri == other.uri
|
||||||
end
|
end
|
||||||
|
|
||||||
alias_method :eql?, :== # :nodoc:
|
alias_method :eql?, :== # :nodoc:
|
||||||
|
|
|
@ -76,10 +76,10 @@ class Gem::Source::Git < Gem::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
super and
|
super &&
|
||||||
@name == other.name and
|
@name == other.name &&
|
||||||
@repository == other.repository and
|
@repository == other.repository &&
|
||||||
@reference == other.reference and
|
@reference == other.reference &&
|
||||||
@need_submodules == other.need_submodules
|
@need_submodules == other.need_submodules
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ class Gem::SpecFetcher
|
||||||
|
|
||||||
found[source] = specs.select do |tup|
|
found[source] = specs.select do |tup|
|
||||||
if dependency.match?(tup)
|
if dependency.match?(tup)
|
||||||
if matching_platform and !Gem::Platform.match_gem?(tup.platform, tup.name)
|
if matching_platform && !Gem::Platform.match_gem?(tup.platform, tup.name)
|
||||||
pm = (
|
pm = (
|
||||||
rejected_specs[dependency] ||= \
|
rejected_specs[dependency] ||= \
|
||||||
Gem::PlatformMismatch.new(tup.name, tup.version))
|
Gem::PlatformMismatch.new(tup.name, tup.version))
|
||||||
|
|
|
@ -473,7 +473,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# spec.platform = Gem::Platform.local
|
# spec.platform = Gem::Platform.local
|
||||||
|
|
||||||
def platform=(platform)
|
def platform=(platform)
|
||||||
if @original_platform.nil? or
|
if @original_platform.nil? ||
|
||||||
@original_platform == Gem::Platform::RUBY
|
@original_platform == Gem::Platform::RUBY
|
||||||
@original_platform = platform
|
@original_platform = platform
|
||||||
end
|
end
|
||||||
|
@ -1046,7 +1046,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
def self.find_active_stub_by_path(path)
|
def self.find_active_stub_by_path(path)
|
||||||
stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
|
stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
|
||||||
s.activated? and s.contains_requirable_file? path
|
s.activated? && s.contains_requirable_file?(path)
|
||||||
end || NOT_FOUND)
|
end || NOT_FOUND)
|
||||||
stub.this
|
stub.this
|
||||||
end
|
end
|
||||||
|
@ -1234,7 +1234,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
latest_remote = remotes.sort.last
|
latest_remote = remotes.sort.last
|
||||||
|
|
||||||
yield [local_spec, latest_remote] if
|
yield [local_spec, latest_remote] if
|
||||||
latest_remote and local_spec.version < latest_remote
|
latest_remote && local_spec.version < latest_remote
|
||||||
end
|
end
|
||||||
|
|
||||||
nil
|
nil
|
||||||
|
@ -1557,7 +1557,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# Singular reader for #authors. Returns the first author in the list
|
# Singular reader for #authors. Returns the first author in the list
|
||||||
|
|
||||||
def author
|
def author
|
||||||
val = authors and val.first
|
(val = authors) && val.first
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1669,7 +1669,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
conflicts = {}
|
conflicts = {}
|
||||||
self.runtime_dependencies.each do |dep|
|
self.runtime_dependencies.each do |dep|
|
||||||
spec = Gem.loaded_specs[dep.name]
|
spec = Gem.loaded_specs[dep.name]
|
||||||
if spec and not spec.satisfies_requirement? dep
|
if spec && !spec.satisfies_requirement?(dep)
|
||||||
(conflicts[spec] ||= []) << dep
|
(conflicts[spec] ||= []) << dep
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1696,7 +1696,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
self.dependencies.any? do |dep|
|
self.dependencies.any? do |dep|
|
||||||
if dep.runtime?
|
if dep.runtime?
|
||||||
spec = Gem.loaded_specs[dep.name]
|
spec = Gem.loaded_specs[dep.name]
|
||||||
spec and not spec.satisfies_requirement? dep
|
spec && !spec.satisfies_requirement?(dep)
|
||||||
else
|
else
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
@ -1717,7 +1717,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
DateLike = Object.new # :nodoc:
|
DateLike = Object.new # :nodoc:
|
||||||
def DateLike.===(obj) # :nodoc:
|
def DateLike.===(obj) # :nodoc:
|
||||||
defined?(::Date) and Date === obj
|
defined?(::Date) && Date === obj
|
||||||
end
|
end
|
||||||
|
|
||||||
DateTimeFormat = # :nodoc:
|
DateTimeFormat = # :nodoc:
|
||||||
|
@ -1757,9 +1757,9 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# executable now. See Gem.bin_path.
|
# executable now. See Gem.bin_path.
|
||||||
|
|
||||||
def default_executable # :nodoc:
|
def default_executable # :nodoc:
|
||||||
if defined?(@default_executable) and @default_executable
|
if defined?(@default_executable) && @default_executable
|
||||||
result = @default_executable
|
result = @default_executable
|
||||||
elsif @executables and @executables.size == 1
|
elsif @executables && @executables.size == 1
|
||||||
result = Array(@executables).first
|
result = Array(@executables).first
|
||||||
else
|
else
|
||||||
result = nil
|
result = nil
|
||||||
|
@ -1876,7 +1876,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# Singular accessor for #executables
|
# Singular accessor for #executables
|
||||||
|
|
||||||
def executable
|
def executable
|
||||||
val = executables and val.first
|
(val = executables) && val.first
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -1988,7 +1988,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# True if this gem has files in test_files
|
# True if this gem has files in test_files
|
||||||
|
|
||||||
def has_unit_tests? # :nodoc:
|
def has_unit_tests? # :nodoc:
|
||||||
not test_files.empty?
|
!test_files.empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
# :stopdoc:
|
# :stopdoc:
|
||||||
|
@ -2041,7 +2041,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
self.name = name if name
|
self.name = name if name
|
||||||
self.version = version if version
|
self.version = version if version
|
||||||
|
|
||||||
if platform = Gem.platforms.last and platform != Gem::Platform::RUBY and platform != Gem::Platform.local
|
if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local
|
||||||
self.platform = platform
|
self.platform = platform
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -2156,7 +2156,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if @specification_version > CURRENT_SPECIFICATION_VERSION and
|
if @specification_version > CURRENT_SPECIFICATION_VERSION &&
|
||||||
sym.to_s.end_with?("=")
|
sym.to_s.end_with?("=")
|
||||||
warn "ignoring #{sym} loading #{full_name}" if $DEBUG
|
warn "ignoring #{sym} loading #{full_name}" if $DEBUG
|
||||||
else
|
else
|
||||||
|
@ -2183,7 +2183,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# file list.
|
# file list.
|
||||||
|
|
||||||
def normalize
|
def normalize
|
||||||
if defined?(@extra_rdoc_files) and @extra_rdoc_files
|
if defined?(@extra_rdoc_files) && @extra_rdoc_files
|
||||||
@extra_rdoc_files.uniq!
|
@extra_rdoc_files.uniq!
|
||||||
@files ||= []
|
@files ||= []
|
||||||
@files.concat(@extra_rdoc_files)
|
@files.concat(@extra_rdoc_files)
|
||||||
|
@ -2208,7 +2208,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# platform. For use with legacy gems.
|
# platform. For use with legacy gems.
|
||||||
|
|
||||||
def original_name # :nodoc:
|
def original_name # :nodoc:
|
||||||
if platform == Gem::Platform::RUBY or platform.nil?
|
if platform == Gem::Platform::RUBY || platform.nil?
|
||||||
"#{@name}-#{@version}"
|
"#{@name}-#{@version}"
|
||||||
else
|
else
|
||||||
"#{@name}-#{@version}-#{@original_platform}"
|
"#{@name}-#{@version}-#{@original_platform}"
|
||||||
|
@ -2241,8 +2241,8 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
attributes.each do |attr_name|
|
attributes.each do |attr_name|
|
||||||
current_value = self.send attr_name
|
current_value = self.send attr_name
|
||||||
current_value = current_value.sort if %i[files test_files].include? attr_name
|
current_value = current_value.sort if %i[files test_files].include? attr_name
|
||||||
if current_value != default_value(attr_name) or
|
if current_value != default_value(attr_name) ||
|
||||||
self.class.required_attribute? attr_name
|
self.class.required_attribute?(attr_name)
|
||||||
|
|
||||||
q.text "s.#{attr_name} = "
|
q.text "s.#{attr_name} = "
|
||||||
|
|
||||||
|
@ -2300,7 +2300,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# Singular accessor for #require_paths
|
# Singular accessor for #require_paths
|
||||||
|
|
||||||
def require_path
|
def require_path
|
||||||
val = require_paths and val.first
|
(val = require_paths) && val.first
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -2429,7 +2429,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
# Singular accessor for #test_files
|
# Singular accessor for #test_files
|
||||||
|
|
||||||
def test_file # :nodoc:
|
def test_file # :nodoc:
|
||||||
val = test_files and val.first
|
(val = test_files) && val.first
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -2451,7 +2451,7 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
@test_files = [@test_suite_file].flatten
|
@test_files = [@test_suite_file].flatten
|
||||||
@test_suite_file = nil
|
@test_suite_file = nil
|
||||||
end
|
end
|
||||||
if defined?(@test_files) and @test_files
|
if defined?(@test_files) && @test_files
|
||||||
@test_files
|
@test_files
|
||||||
else
|
else
|
||||||
@test_files = []
|
@test_files = []
|
||||||
|
@ -2475,13 +2475,13 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
result << " s.name = #{ruby_code name}"
|
result << " s.name = #{ruby_code name}"
|
||||||
result << " s.version = #{ruby_code version}"
|
result << " s.version = #{ruby_code version}"
|
||||||
unless platform.nil? or platform == Gem::Platform::RUBY
|
unless platform.nil? || platform == Gem::Platform::RUBY
|
||||||
result << " s.platform = #{ruby_code original_platform}"
|
result << " s.platform = #{ruby_code original_platform}"
|
||||||
end
|
end
|
||||||
result << ""
|
result << ""
|
||||||
result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="
|
result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="
|
||||||
|
|
||||||
if metadata and !metadata.empty?
|
if metadata && !metadata.empty?
|
||||||
result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
|
result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
|
||||||
end
|
end
|
||||||
result << " s.require_paths = #{ruby_code raw_require_paths}"
|
result << " s.require_paths = #{ruby_code raw_require_paths}"
|
||||||
|
@ -2665,6 +2665,8 @@ class Gem::Specification < Gem::BasicSpecification
|
||||||
|
|
||||||
def version=(version)
|
def version=(version)
|
||||||
@version = Gem::Version.create(version)
|
@version = Gem::Version.create(version)
|
||||||
|
return if @version.nil?
|
||||||
|
|
||||||
# skip to set required_ruby_version when pre-released rubygems.
|
# skip to set required_ruby_version when pre-released rubygems.
|
||||||
# It caused to raise CircularDependencyError
|
# It caused to raise CircularDependencyError
|
||||||
if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
|
if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
|
||||||
|
|
|
@ -188,7 +188,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
||||||
prerelease_dep && !@specification.version.prerelease?
|
prerelease_dep && !@specification.version.prerelease?
|
||||||
|
|
||||||
open_ended = dep.requirement.requirements.all? do |op, version|
|
open_ended = dep.requirement.requirements.all? do |op, version|
|
||||||
not version.prerelease? and (op == ">" or op == ">=")
|
!version.prerelease? && (op == ">" || op == ">=")
|
||||||
end
|
end
|
||||||
|
|
||||||
if open_ended
|
if open_ended
|
||||||
|
@ -203,7 +203,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
||||||
else
|
else
|
||||||
bugfix = if op == ">"
|
bugfix = if op == ">"
|
||||||
", '> #{dep_version}'"
|
", '> #{dep_version}'"
|
||||||
elsif op == ">=" and base != segments
|
elsif op == ">=" && base != segments
|
||||||
", '>= #{dep_version}'"
|
", '>= #{dep_version}'"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -338,7 +338,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
||||||
String
|
String
|
||||||
end
|
end
|
||||||
|
|
||||||
unless Array === val and val.all? {|x| x.kind_of?(klass) }
|
unless Array === val && val.all? {|x| x.kind_of?(klass) }
|
||||||
error "#{field} must be an Array of #{klass}"
|
error "#{field} must be an Array of #{klass}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -404,7 +404,7 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
||||||
homepage = @specification.homepage
|
homepage = @specification.homepage
|
||||||
|
|
||||||
# Make sure a homepage is valid HTTP/HTTPS URI
|
# Make sure a homepage is valid HTTP/HTTPS URI
|
||||||
if homepage and not homepage.empty?
|
if homepage && !homepage.empty?
|
||||||
require "uri"
|
require "uri"
|
||||||
begin
|
begin
|
||||||
homepage_uri = URI.parse(homepage)
|
homepage_uri = URI.parse(homepage)
|
||||||
|
|
|
@ -105,8 +105,8 @@ class Gem::Uninstaller
|
||||||
@default_specs_matching_uninstall_params = default_specs
|
@default_specs_matching_uninstall_params = default_specs
|
||||||
|
|
||||||
list, other_repo_specs = list.partition do |spec|
|
list, other_repo_specs = list.partition do |spec|
|
||||||
@gem_home == spec.base_dir or
|
@gem_home == spec.base_dir ||
|
||||||
(@user_install and spec.base_dir == Gem.user_dir)
|
(@user_install && spec.base_dir == Gem.user_dir)
|
||||||
end
|
end
|
||||||
|
|
||||||
list.sort!
|
list.sort!
|
||||||
|
@ -239,8 +239,8 @@ class Gem::Uninstaller
|
||||||
# spec:: the spec of the gem to be uninstalled
|
# spec:: the spec of the gem to be uninstalled
|
||||||
|
|
||||||
def remove(spec)
|
def remove(spec)
|
||||||
unless path_ok?(@gem_home, spec) or
|
unless path_ok?(@gem_home, spec) ||
|
||||||
(@user_install and path_ok?(Gem.user_dir, spec))
|
(@user_install && path_ok?(Gem.user_dir, spec))
|
||||||
e = Gem::GemNotInHomeException.new \
|
e = Gem::GemNotInHomeException.new \
|
||||||
"Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
|
"Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
|
||||||
e.spec = spec
|
e.spec = spec
|
||||||
|
|
|
@ -284,7 +284,7 @@ class Gem::StreamUI
|
||||||
# Ask a question. Returns an answer if connected to a tty, nil otherwise.
|
# Ask a question. Returns an answer if connected to a tty, nil otherwise.
|
||||||
|
|
||||||
def ask(question)
|
def ask(question)
|
||||||
return nil if not tty?
|
return nil if !tty?
|
||||||
|
|
||||||
@outs.print(question + " ")
|
@outs.print(question + " ")
|
||||||
@outs.flush
|
@outs.flush
|
||||||
|
@ -298,7 +298,7 @@ class Gem::StreamUI
|
||||||
# Ask for a password. Does not echo response to terminal.
|
# Ask for a password. Does not echo response to terminal.
|
||||||
|
|
||||||
def ask_for_password(question)
|
def ask_for_password(question)
|
||||||
return nil if not tty?
|
return nil if !tty?
|
||||||
|
|
||||||
@outs.print(question, " ")
|
@outs.print(question, " ")
|
||||||
@outs.flush
|
@outs.flush
|
||||||
|
|
|
@ -171,9 +171,7 @@ class Gem::Version
|
||||||
# True if the +version+ string matches RubyGems' requirements.
|
# True if the +version+ string matches RubyGems' requirements.
|
||||||
|
|
||||||
def self.correct?(version)
|
def self.correct?(version)
|
||||||
unless Gem::Deprecate.skip
|
nil_versions_are_discouraged! if version.nil?
|
||||||
warn "nil versions are discouraged and will be deprecated in Rubygems 4" if version.nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
!!(version.to_s =~ ANCHORED_VERSION_PATTERN)
|
!!(version.to_s =~ ANCHORED_VERSION_PATTERN)
|
||||||
end
|
end
|
||||||
|
@ -190,6 +188,8 @@ class Gem::Version
|
||||||
if self === input # check yourself before you wreck yourself
|
if self === input # check yourself before you wreck yourself
|
||||||
input
|
input
|
||||||
elsif input.nil?
|
elsif input.nil?
|
||||||
|
nil_versions_are_discouraged!
|
||||||
|
|
||||||
nil
|
nil
|
||||||
else
|
else
|
||||||
new input
|
new input
|
||||||
|
@ -206,6 +206,14 @@ class Gem::Version
|
||||||
@@all[version] ||= super
|
@@all[version] ||= super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.nil_versions_are_discouraged!
|
||||||
|
unless Gem::Deprecate.skip
|
||||||
|
warn "nil versions are discouraged and will be deprecated in Rubygems 4"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private_class_method :nil_versions_are_discouraged!
|
||||||
|
|
||||||
##
|
##
|
||||||
# Constructs a Version from the +version+ string. A version string is a
|
# Constructs a Version from the +version+ string. A version string is a
|
||||||
# series of digits or ASCII letters separated by dots.
|
# series of digits or ASCII letters separated by dots.
|
||||||
|
@ -244,7 +252,7 @@ class Gem::Version
|
||||||
# same precision. Version "1.0" is not the same as version "1".
|
# same precision. Version "1.0" is not the same as version "1".
|
||||||
|
|
||||||
def eql?(other)
|
def eql?(other)
|
||||||
self.class === other and @version == other._version
|
self.class === other && @version == other._version
|
||||||
end
|
end
|
||||||
|
|
||||||
def hash # :nodoc:
|
def hash # :nodoc:
|
||||||
|
|
|
@ -427,9 +427,8 @@ RSpec.describe "Bundler::RubyVersion and its subclasses" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#version" do
|
describe "#version" do
|
||||||
it "should return a copy of the value of RUBY_VERSION" do
|
it "should return the value of Gem.ruby_version as a string" do
|
||||||
expect(subject.versions).to eq([RUBY_VERSION])
|
expect(subject.versions).to eq([Gem.ruby_version.to_s])
|
||||||
expect(subject.versions.first).to_not be(RUBY_VERSION)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -446,13 +445,12 @@ RSpec.describe "Bundler::RubyVersion and its subclasses" do
|
||||||
describe "#engine_version" do
|
describe "#engine_version" do
|
||||||
context "engine is ruby" do
|
context "engine is ruby" do
|
||||||
before do
|
before do
|
||||||
stub_const("RUBY_ENGINE_VERSION", "2.2.4")
|
allow(Gem).to receive(:ruby_version).and_return(Gem::Version.new("2.2.4"))
|
||||||
stub_const("RUBY_ENGINE", "ruby")
|
stub_const("RUBY_ENGINE", "ruby")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return a copy of the value of RUBY_ENGINE_VERSION" do
|
it "should return the value of Gem.ruby_version as a string" do
|
||||||
expect(bundler_system_ruby_version.engine_versions).to eq(["2.2.4"])
|
expect(bundler_system_ruby_version.engine_versions).to eq(["2.2.4"])
|
||||||
expect(bundler_system_ruby_version.engine_versions.first).to_not be(RUBY_ENGINE_VERSION)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -522,14 +522,14 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
ruby '~> 1.2'
|
ruby '~> 1.2'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
expect(err).to include("Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified ~> 1.2")
|
expect(err).to include("Your Ruby version is #{Gem.ruby_version}, but your Gemfile specified ~> 1.2")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "and using a supported Ruby version" do
|
context "and using a supported Ruby version" do
|
||||||
before do
|
before do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION}'
|
ruby '~> #{Gem.ruby_version}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
end
|
end
|
||||||
|
@ -555,7 +555,7 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
|
|
||||||
it "updates Gemfile.lock with updated yet still compatible ruby version" do
|
it "updates Gemfile.lock with updated yet still compatible ruby version" do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION[0..2]}'
|
ruby '~> #{current_ruby_minor}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -913,7 +913,7 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
source "https://gem.repo4"
|
source "https://gem.repo4"
|
||||||
|
|
||||||
ruby "#{RUBY_VERSION}"
|
ruby "#{Gem.ruby_version}"
|
||||||
|
|
||||||
gem "loofah", "~> 2.12.0"
|
gem "loofah", "~> 2.12.0"
|
||||||
G
|
G
|
||||||
|
@ -1020,6 +1020,30 @@ RSpec.describe "bundle install with gem sources" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with --prefer-local flag" do
|
||||||
|
before do
|
||||||
|
build_repo4 do
|
||||||
|
build_gem "foo", "1.0.1"
|
||||||
|
build_gem "foo", "1.0.0"
|
||||||
|
build_gem "bar", "1.0.0"
|
||||||
|
end
|
||||||
|
|
||||||
|
system_gems "foo-1.0.0", :path => default_bundle_path, :gem_repo => gem_repo4
|
||||||
|
end
|
||||||
|
|
||||||
|
it "fetches remote sources only when not available locally" do
|
||||||
|
install_gemfile <<-G, :"prefer-local" => true, :verbose => true
|
||||||
|
source "#{file_uri_for(gem_repo4)}"
|
||||||
|
|
||||||
|
gem "foo"
|
||||||
|
gem "bar"
|
||||||
|
G
|
||||||
|
|
||||||
|
expect(out).to include("Using foo 1.0.0").and include("Fetching bar 1.0.0").and include("Installing bar 1.0.0")
|
||||||
|
expect(last_command).to be_success
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "with a symlinked configured as bundle path and a gem with symlinks" do
|
context "with a symlinked configured as bundle path and a gem with symlinks" do
|
||||||
before do
|
before do
|
||||||
symlinked_bundled_app = tmp("bundled_app-symlink")
|
symlinked_bundled_app = tmp("bundled_app-symlink")
|
||||||
|
|
|
@ -541,11 +541,9 @@ RSpec.describe "bundle lock" do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "respects lower bound ruby requirements" do
|
it "respects lower bound ruby requirements" do
|
||||||
skip "this spec does not work with prereleases because their version is actually lower than their reported `RUBY_VERSION`" if RUBY_PATCHLEVEL == -1
|
|
||||||
|
|
||||||
build_repo4 do
|
build_repo4 do
|
||||||
build_gem "our_private_gem", "0.1.0" do |s|
|
build_gem "our_private_gem", "0.1.0" do |s|
|
||||||
s.required_ruby_version = ">= #{RUBY_VERSION}"
|
s.required_ruby_version = ">= #{Gem.ruby_version}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -604,6 +604,22 @@ RSpec.describe "bundle outdated" do
|
||||||
expect(out).to end_with(expected_output)
|
expect(out).to end_with(expected_output)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "only reports gems that have a newer version that matches the specified dependency version requirements, using --strict alias" do
|
||||||
|
update_repo2 do
|
||||||
|
build_gem "activesupport", "3.0"
|
||||||
|
build_gem "weakling", "0.0.5"
|
||||||
|
end
|
||||||
|
|
||||||
|
bundle :outdated, :strict => true, :raise_on_error => false
|
||||||
|
|
||||||
|
expected_output = <<~TABLE.strip
|
||||||
|
Gem Current Latest Requested Groups
|
||||||
|
weakling 0.0.3 0.0.5 ~> 0.0.1 default
|
||||||
|
TABLE
|
||||||
|
|
||||||
|
expect(out).to end_with(expected_output)
|
||||||
|
end
|
||||||
|
|
||||||
it "doesn't crash when some deps unused on the current platform" do
|
it "doesn't crash when some deps unused on the current platform" do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo2)}"
|
source "#{file_uri_for(gem_repo2)}"
|
||||||
|
@ -1098,7 +1114,6 @@ RSpec.describe "bundle outdated" do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "conservative updates" do
|
context "conservative updates" do
|
||||||
context "without --strict" do
|
|
||||||
before do
|
before do
|
||||||
build_repo4 do
|
build_repo4 do
|
||||||
build_gem "patch", %w[1.0.0 1.0.1]
|
build_gem "patch", %w[1.0.0 1.0.1]
|
||||||
|
@ -1114,8 +1129,7 @@ RSpec.describe "bundle outdated" do
|
||||||
gem 'major', '1.0.0'
|
gem 'major', '1.0.0'
|
||||||
G
|
G
|
||||||
|
|
||||||
# remove 1.4.3 requirement and bar altogether
|
# remove all version requirements
|
||||||
# to setup update specs below
|
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo4)}"
|
source "#{file_uri_for(gem_repo4)}"
|
||||||
gem 'patch'
|
gem 'patch'
|
||||||
|
@ -1164,7 +1178,7 @@ RSpec.describe "bundle outdated" do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with --strict" do
|
context "tricky conservative updates" do
|
||||||
before do
|
before do
|
||||||
build_repo4 do
|
build_repo4 do
|
||||||
build_gem "foo", %w[1.4.3 1.4.4] do |s|
|
build_gem "foo", %w[1.4.3 1.4.4] do |s|
|
||||||
|
@ -1197,8 +1211,8 @@ RSpec.describe "bundle outdated" do
|
||||||
G
|
G
|
||||||
end
|
end
|
||||||
|
|
||||||
it "shows gems with --strict updating to patch and filtering to patch" do
|
it "shows gems updating to patch and filtering to patch" do
|
||||||
bundle "outdated --patch --strict --filter-patch", :raise_on_error => false
|
bundle "outdated --patch --filter-patch", :raise_on_error => false, :env => { "DEBUG_RESOLVER" => "1" }
|
||||||
|
|
||||||
expected_output = <<~TABLE.strip
|
expected_output = <<~TABLE.strip
|
||||||
Gem Current Latest Requested Groups
|
Gem Current Latest Requested Groups
|
||||||
|
@ -1208,6 +1222,17 @@ RSpec.describe "bundle outdated" do
|
||||||
|
|
||||||
expect(out).to end_with(expected_output)
|
expect(out).to end_with(expected_output)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "shows gems updating to patch and filtering to patch, in debug mode" do
|
||||||
|
bundle "outdated --patch --filter-patch", :raise_on_error => false, :env => { "DEBUG" => "1" }
|
||||||
|
|
||||||
|
expected_output = <<~TABLE.strip
|
||||||
|
Gem Current Latest Requested Groups Path
|
||||||
|
bar 2.0.3 2.0.5
|
||||||
|
foo 1.4.3 1.4.4 >= 0 default
|
||||||
|
TABLE
|
||||||
|
|
||||||
|
expect(out).to end_with(expected_output)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ Your app has gems that work on these platforms:
|
||||||
* #{specific_local_platform}
|
* #{specific_local_platform}
|
||||||
|
|
||||||
Your Gemfile specifies a Ruby version requirement:
|
Your Gemfile specifies a Ruby version requirement:
|
||||||
* ruby #{RUBY_VERSION}
|
* ruby #{Gem.ruby_version}
|
||||||
|
|
||||||
Your current platform satisfies the Ruby version requirement.
|
Your current platform satisfies the Ruby version requirement.
|
||||||
G
|
G
|
||||||
|
@ -42,7 +42,7 @@ Your app has gems that work on these platforms:
|
||||||
* #{specific_local_platform}
|
* #{specific_local_platform}
|
||||||
|
|
||||||
Your Gemfile specifies a Ruby version requirement:
|
Your Gemfile specifies a Ruby version requirement:
|
||||||
* ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}
|
* #{Bundler::RubyVersion.system.single_version_string}
|
||||||
|
|
||||||
Your current platform satisfies the Ruby version requirement.
|
Your current platform satisfies the Ruby version requirement.
|
||||||
G
|
G
|
||||||
|
@ -85,7 +85,7 @@ Your app has gems that work on these platforms:
|
||||||
Your Gemfile specifies a Ruby version requirement:
|
Your Gemfile specifies a Ruby version requirement:
|
||||||
* ruby #{not_local_ruby_version}
|
* ruby #{not_local_ruby_version}
|
||||||
|
|
||||||
Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified #{not_local_ruby_version}
|
Your Ruby version is #{Gem.ruby_version}, but your Gemfile specified #{not_local_ruby_version}
|
||||||
G
|
G
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -231,7 +231,7 @@ G
|
||||||
L
|
L
|
||||||
|
|
||||||
bundle "platform --ruby"
|
bundle "platform --ruby"
|
||||||
expect(out).to eq("ruby 1.0.0p127")
|
expect(out).to eq("ruby 1.0.0")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "handles when there is a requirement in the gemfile" do
|
it "handles when there is a requirement in the gemfile" do
|
||||||
|
@ -255,18 +255,18 @@ G
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:ruby_version_correct) { "ruby \"#{RUBY_VERSION}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{local_engine_version}\"" }
|
let(:ruby_version_correct) { "ruby \"#{Gem.ruby_version}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{local_engine_version}\"" }
|
||||||
let(:ruby_version_correct_engineless) { "ruby \"#{RUBY_VERSION}\"" }
|
let(:ruby_version_correct_engineless) { "ruby \"#{Gem.ruby_version}\"" }
|
||||||
let(:ruby_version_correct_patchlevel) { "#{ruby_version_correct}, :patchlevel => '#{RUBY_PATCHLEVEL}'" }
|
let(:ruby_version_correct_patchlevel) { "#{ruby_version_correct}, :patchlevel => '#{RUBY_PATCHLEVEL}'" }
|
||||||
let(:ruby_version_incorrect) { "ruby \"#{not_local_ruby_version}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{not_local_ruby_version}\"" }
|
let(:ruby_version_incorrect) { "ruby \"#{not_local_ruby_version}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{not_local_ruby_version}\"" }
|
||||||
let(:engine_incorrect) { "ruby \"#{RUBY_VERSION}\", :engine => \"#{not_local_tag}\", :engine_version => \"#{RUBY_VERSION}\"" }
|
let(:engine_incorrect) { "ruby \"#{Gem.ruby_version}\", :engine => \"#{not_local_tag}\", :engine_version => \"#{Gem.ruby_version}\"" }
|
||||||
let(:engine_version_incorrect) { "ruby \"#{RUBY_VERSION}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{not_local_engine_version}\"" }
|
let(:engine_version_incorrect) { "ruby \"#{Gem.ruby_version}\", :engine => \"#{local_ruby_engine}\", :engine_version => \"#{not_local_engine_version}\"" }
|
||||||
let(:patchlevel_incorrect) { "#{ruby_version_correct}, :patchlevel => '#{not_local_patchlevel}'" }
|
let(:patchlevel_incorrect) { "#{ruby_version_correct}, :patchlevel => '#{not_local_patchlevel}'" }
|
||||||
let(:patchlevel_fixnum) { "#{ruby_version_correct}, :patchlevel => #{RUBY_PATCHLEVEL}1" }
|
let(:patchlevel_fixnum) { "#{ruby_version_correct}, :patchlevel => #{RUBY_PATCHLEVEL}1" }
|
||||||
|
|
||||||
def should_be_ruby_version_incorrect
|
def should_be_ruby_version_incorrect
|
||||||
expect(exitstatus).to eq(18)
|
expect(exitstatus).to eq(18)
|
||||||
expect(err).to be_include("Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified #{not_local_ruby_version}")
|
expect(err).to be_include("Your Ruby version is #{Gem.ruby_version}, but your Gemfile specified #{not_local_ruby_version}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def should_be_engine_incorrect
|
def should_be_engine_incorrect
|
|
@ -983,7 +983,7 @@ RSpec.describe "bundle update --ruby" do
|
||||||
context "when the Gemfile removes the ruby" do
|
context "when the Gemfile removes the ruby" do
|
||||||
before do
|
before do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION}'
|
ruby '~> #{Gem.ruby_version}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -1013,12 +1013,12 @@ RSpec.describe "bundle update --ruby" do
|
||||||
context "when the Gemfile specified an updated Ruby version" do
|
context "when the Gemfile specified an updated Ruby version" do
|
||||||
before do
|
before do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION}'
|
ruby '~> #{Gem.ruby_version}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
|
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION[0..2]}'
|
ruby '~> #{current_ruby_minor}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
end
|
end
|
||||||
|
@ -1047,7 +1047,7 @@ RSpec.describe "bundle update --ruby" do
|
||||||
context "when a different Ruby is being used than has been versioned" do
|
context "when a different Ruby is being used than has been versioned" do
|
||||||
before do
|
before do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION}'
|
ruby '~> #{Gem.ruby_version}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -1083,7 +1083,7 @@ RSpec.describe "bundle update --ruby" do
|
||||||
L
|
L
|
||||||
|
|
||||||
gemfile <<-G
|
gemfile <<-G
|
||||||
ruby '~> #{RUBY_VERSION}'
|
ruby '~> #{Gem.ruby_version}'
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
G
|
G
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,13 +11,13 @@ RSpec.describe "ruby requirement" do
|
||||||
it "allows adding gems" do
|
it "allows adding gems" do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby "#{RUBY_VERSION}"
|
ruby "#{Gem.ruby_version}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby "#{RUBY_VERSION}"
|
ruby "#{Gem.ruby_version}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
gem "rack-obama"
|
gem "rack-obama"
|
||||||
G
|
G
|
||||||
|
@ -28,7 +28,7 @@ RSpec.describe "ruby requirement" do
|
||||||
it "allows removing the ruby version requirement" do
|
it "allows removing the ruby version requirement" do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby "~> #{RUBY_VERSION}"
|
ruby "~> #{Gem.ruby_version}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ RSpec.describe "ruby requirement" do
|
||||||
it "allows changing the ruby version requirement to something compatible" do
|
it "allows changing the ruby version requirement to something compatible" do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby ">= #{RUBY_VERSION[0..2]}.0"
|
ruby ">= #{current_ruby_minor}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ RSpec.describe "ruby requirement" do
|
||||||
|
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby ">= #{RUBY_VERSION}"
|
ruby ">= #{Gem.ruby_version}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ RSpec.describe "ruby requirement" do
|
||||||
|
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby ">= #{RUBY_VERSION[0..2]}.0"
|
ruby ">= #{current_ruby_minor}"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ RSpec.describe "ruby requirement" do
|
||||||
it "allows requirements with trailing whitespace" do
|
it "allows requirements with trailing whitespace" do
|
||||||
install_gemfile <<-G
|
install_gemfile <<-G
|
||||||
source "#{file_uri_for(gem_repo1)}"
|
source "#{file_uri_for(gem_repo1)}"
|
||||||
ruby "#{RUBY_VERSION}\\n \t\\n"
|
ruby "#{Gem.ruby_version}\\n \t\\n"
|
||||||
gem "rack"
|
gem "rack"
|
||||||
G
|
G
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue