Class: Bundler::CLI::Outdated
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/bundler/cli/outdated.rb |
Class Method Summary
- .new(options, gems) ⇒ Outdated constructor
Instance Attribute Summary
Instance Method Summary
- #run
- #check_for_deployment_mode private
- #display_nothing_outdated_message(filter_options_patch) private
- #get_version_semver_portion_value(spec, version_portion_index) private
- #print_gem(current_spec, active_spec, dependency, groups, options_include_groups) private
- #retrieve_active_spec(strict, definition, current_spec) private
- #update_present_via_semver_portions(current_spec, active_spec, options) private
Constructor Details
.new(options, gems) ⇒ Outdated
Instance Attribute Details
#gems (readonly)
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 5
attr_reader :, :gems
#options (readonly)
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 5
attr_reader :, :gems
Instance Method Details
#check_for_deployment_mode (private)
# File 'lib/bundler/cli/outdated.rb', line 221
def check_for_deployment_mode return unless Bundler.frozen_bundle? suggested_command = if Bundler.settings.locations("frozen")[:global] "bundle config --delete frozen" elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any? "bundle config --delete deployment" else "bundle install --no-deployment" end raise ProductionError, "You are trying to check outdated gems in " \ "deployment mode. Run `bundle outdated` elsewhere.\n" \ "\nIf this is a development machine, remove the " \ "#{Bundler.default_gemfile} freeze" \ "\nby running `#{suggested_command}`." end
#display_nothing_outdated_message(filter_options_patch) (private)
[ GitHub ]#get_version_semver_portion_value(spec, version_portion_index) (private)
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 261
def get_version_semver_portion_value(spec, version_portion_index) version_section = spec.version.segments[version_portion_index, 1] version_section.nil? ? 0 : (version_section.first || 0) end
#print_gem(current_spec, active_spec, dependency, groups, options_include_groups) (private)
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 198
def print_gem(current_spec, active_spec, dependency, groups, ) spec_version = "#{active_spec.version}#{active_spec.git_version}" spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from current_version = "#{current_spec.version}#{current_spec.git_version}" if dependency && dependency.specific? dependency_version = %(, requested #{dependency.requirement}) end spec_outdated_info = "#{active_spec.name} (newest #{spec_version}, " \ "installed #{current_version}#{dependency_version})" = if [:parseable] spec_outdated_info.to_s elsif || !groups " * #{spec_outdated_info}" else " * #{spec_outdated_info} in groups \"#{groups}\"" end Bundler.ui.info .rstrip end
#retrieve_active_spec(strict, definition, current_spec) (private)
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 170
def retrieve_active_spec(strict, definition, current_spec) if strict active_spec = definition.find_resolved_spec(current_spec) else active_specs = definition.find_indexed_specs(current_spec) if !current_spec.version.prerelease? && ! [:pre] && active_specs.size > 1 active_specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? } end active_spec = active_specs.last end active_spec end
#run
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 12
def run check_for_deployment_mode sources = Array( [:source]) gems.each do |gem_name| Bundler::CLI::Common.select_spec(gem_name) end Bundler.definition.validate_runtime! current_specs = Bundler.ui.silence { Bundler.definition.resolve } current_dependencies = {} Bundler.ui.silence do Bundler.load.dependencies.each do |dep| current_dependencies[dep.name] = dep end end definition = if gems.empty? && sources.empty? # We're doing a full update Bundler.definition(true) else Bundler.definition(:gems => gems, :sources => sources) end Bundler::CLI::Common.configure_gem_version_promoter( Bundler.definition, ) # the patch level options imply strict is also true. It wouldn't make # sense otherwise. strict = [:strict] || Bundler::CLI::Common. ( ).any? = .keys & %w[filter-major filter-minor filter-patch] definition_resolution = proc do [:local] ? definition.resolve_with_cache! : definition.resolve_remotely! end if [:parseable] Bundler.ui.silence(&definition_resolution) else definition_resolution.call end Bundler.ui.info "" outdated_gems_by_groups = {} outdated_gems_list = [] # Loop through the current specs gemfile_specs, dependency_specs = current_specs.partition do |spec| current_dependencies.key? spec.name end specs = if ["only-explicit"] gemfile_specs else gemfile_specs + dependency_specs end specs.sort_by(&:name).each do |current_spec| next if !gems.empty? && !gems.include?(current_spec.name) dependency = current_dependencies[current_spec.name] active_spec = retrieve_active_spec(strict, definition, current_spec) next if active_spec.nil? if .any? update_present = update_present_via_semver_portions(current_spec, active_spec, ) next unless update_present end gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version) next unless gem_outdated || (current_spec.git_version != active_spec.git_version) groups = nil if dependency && ! [:parseable] groups = dependency.groups.join(", ") end outdated_gems_list << { :active_spec => active_spec, :current_spec => current_spec, :dependency => dependency, :groups => groups } outdated_gems_by_groups[groups] ||= [] outdated_gems_by_groups[groups] << { :active_spec => active_spec, :current_spec => current_spec, :dependency => dependency, :groups => groups } end if outdated_gems_list.empty? ( ) else unless [:parseable] if [:pre] Bundler.ui.info "Outdated gems included in the bundle (including " \ "pre-releases):" else Bundler.ui.info "Outdated gems included in the bundle:" end end = [:group, :groups].select do |v| .keys.include?(v.to_s) end if .any? ordered_groups = outdated_gems_by_groups.keys.compact.sort [nil, ordered_groups].flatten.each do |groups| gems = outdated_gems_by_groups[groups] contains_group = if groups groups.split(",").include?( [:group]) else [:group] == "group" end next if (! [:groups] && !contains_group) || gems.nil? unless [:parseable] if groups Bundler.ui.info "===== Group #{groups} =====" else Bundler.ui.info "===== Without group =====" end end gems.each do |gem| print_gem( gem[:current_spec], gem[:active_spec], gem[:dependency], groups, .any? ) end end else outdated_gems_list.each do |gem| print_gem( gem[:current_spec], gem[:active_spec], gem[:dependency], gem[:groups], .any? ) end end exit 1 end end
#update_present_via_semver_portions(current_spec, active_spec, options) (private)
[ GitHub ]# File 'lib/bundler/cli/outdated.rb', line 237
def update_present_via_semver_portions(current_spec, active_spec, ) current_major = current_spec.version.segments.first active_major = active_spec.version.segments.first update_present = false update_present = active_major > current_major if ["filter-major"] if !update_present && ( ["filter-minor"] || ["filter-patch"]) && current_major == active_major current_minor = get_version_semver_portion_value(current_spec, 1) active_minor = get_version_semver_portion_value(active_spec, 1) update_present = active_minor > current_minor if ["filter-minor"] if !update_present && ["filter-patch"] && current_minor == active_minor current_patch = get_version_semver_portion_value(current_spec, 2) active_patch = get_version_semver_portion_value(active_spec, 2) update_present = active_patch > current_patch end end update_present end