2018-11-02 19:07:56 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Bundler
|
|
|
|
class Source
|
2019-06-01 05:49:40 -04:00
|
|
|
autoload :Gemspec, File.expand_path("source/gemspec", __dir__)
|
|
|
|
autoload :Git, File.expand_path("source/git", __dir__)
|
|
|
|
autoload :Metadata, File.expand_path("source/metadata", __dir__)
|
|
|
|
autoload :Path, File.expand_path("source/path", __dir__)
|
|
|
|
autoload :Rubygems, File.expand_path("source/rubygems", __dir__)
|
2021-05-28 06:47:49 -04:00
|
|
|
autoload :RubygemsAggregate, File.expand_path("source/rubygems_aggregate", __dir__)
|
2018-11-02 19:07:56 -04:00
|
|
|
|
|
|
|
attr_accessor :dependency_names
|
|
|
|
|
|
|
|
def unmet_deps
|
|
|
|
specs.unmet_dependency_names
|
|
|
|
end
|
|
|
|
|
|
|
|
def version_message(spec)
|
|
|
|
message = "#{spec.name} #{spec.version}"
|
|
|
|
message += " (#{spec.platform})" if spec.platform != Gem::Platform::RUBY && !spec.platform.nil?
|
|
|
|
|
|
|
|
if Bundler.locked_gems
|
|
|
|
locked_spec = Bundler.locked_gems.specs.find {|s| s.name == spec.name }
|
|
|
|
locked_spec_version = locked_spec.version if locked_spec
|
|
|
|
if locked_spec_version && spec.version != locked_spec_version
|
|
|
|
message += Bundler.ui.add_color(" (was #{locked_spec_version})", version_color(spec.version, locked_spec_version))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
message
|
|
|
|
end
|
|
|
|
|
|
|
|
def can_lock?(spec)
|
|
|
|
spec.source == self
|
|
|
|
end
|
|
|
|
|
2021-04-14 23:47:04 -04:00
|
|
|
def local!; end
|
|
|
|
|
2021-08-18 03:58:51 -04:00
|
|
|
def local_only!; end
|
|
|
|
|
2021-04-14 23:47:04 -04:00
|
|
|
def cached!; end
|
|
|
|
|
|
|
|
def remote!; end
|
|
|
|
|
2021-05-28 06:47:49 -04:00
|
|
|
def add_dependency_names(names)
|
|
|
|
@dependency_names = Array(dependency_names) | Array(names)
|
|
|
|
end
|
|
|
|
|
2018-11-02 19:07:56 -04:00
|
|
|
# it's possible that gems from one source depend on gems from some
|
|
|
|
# other source, so now we download gemspecs and iterate over those
|
|
|
|
# dependencies, looking for gems we don't have info on yet.
|
|
|
|
def double_check_for(*); end
|
|
|
|
|
|
|
|
def dependency_names_to_double_check
|
|
|
|
specs.dependency_names
|
|
|
|
end
|
|
|
|
|
2021-05-28 06:47:49 -04:00
|
|
|
def spec_names
|
|
|
|
specs.spec_names
|
|
|
|
end
|
|
|
|
|
2018-11-02 19:07:56 -04:00
|
|
|
def include?(other)
|
|
|
|
other == self
|
|
|
|
end
|
|
|
|
|
|
|
|
def inspect
|
|
|
|
"#<#{self.class}:0x#{object_id} #{self}>"
|
|
|
|
end
|
|
|
|
|
2021-11-11 17:58:40 -05:00
|
|
|
def identifier
|
2021-07-31 08:10:59 -04:00
|
|
|
to_s
|
|
|
|
end
|
|
|
|
|
2018-11-02 19:07:56 -04:00
|
|
|
def path?
|
|
|
|
instance_of?(Bundler::Source::Path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def extension_cache_path(spec)
|
|
|
|
return unless Bundler.feature_flag.global_gem_cache?
|
|
|
|
return unless source_slug = extension_cache_slug(spec)
|
|
|
|
Bundler.user_cache.join(
|
|
|
|
"extensions", Gem::Platform.local.to_s, Bundler.ruby_scope,
|
|
|
|
source_slug, spec.full_name
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2020-10-15 00:20:25 -04:00
|
|
|
private
|
2018-11-02 19:07:56 -04:00
|
|
|
|
|
|
|
def version_color(spec_version, locked_spec_version)
|
|
|
|
if Gem::Version.correct?(spec_version) && Gem::Version.correct?(locked_spec_version)
|
|
|
|
# display yellow if there appears to be a regression
|
|
|
|
earlier_version?(spec_version, locked_spec_version) ? :yellow : :green
|
|
|
|
else
|
|
|
|
# default to green if the versions cannot be directly compared
|
|
|
|
:green
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def earlier_version?(spec_version, locked_spec_version)
|
|
|
|
Gem::Version.new(spec_version) < Gem::Version.new(locked_spec_version)
|
|
|
|
end
|
|
|
|
|
|
|
|
def print_using_message(message)
|
|
|
|
if !message.include?("(was ") && Bundler.feature_flag.suppress_install_using_messages?
|
|
|
|
Bundler.ui.debug message
|
|
|
|
else
|
|
|
|
Bundler.ui.info message
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def extension_cache_slug(_)
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|