class Dependabot::Bundler::UpdateChecker::ForceUpdater
Attributes
credentials[R]
dependency[R]
dependency_files[R]
options[R]
repo_contents_path[R]
requirements_update_strategy[R]
target_version[R]
Public Class Methods
new(dependency:, dependency_files:, repo_contents_path: nil, credentials:, target_version:, requirements_update_strategy:, update_multiple_dependencies: true, options:)
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 19 def initialize(dependency:, dependency_files:, repo_contents_path: nil, credentials:, target_version:, requirements_update_strategy:, update_multiple_dependencies: true, options:) @dependency = dependency @dependency_files = dependency_files @repo_contents_path = repo_contents_path @credentials = credentials @target_version = target_version @requirements_update_strategy = requirements_update_strategy @update_multiple_dependencies = update_multiple_dependencies @options = options end
Public Instance Methods
updated_dependencies()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 34 def updated_dependencies @updated_dependencies ||= force_update end
Private Instance Methods
build_dependency(original_dep, updated_spec)
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 98 def build_dependency(original_dep, updated_spec) Dependency.new( name: updated_spec.fetch("name"), version: updated_spec.fetch("version"), requirements: RequirementsUpdater.new( requirements: original_dep.requirements, update_strategy: requirements_update_strategy, updated_source: source_for(original_dep), latest_version: updated_spec.fetch("version"), latest_resolvable_version: updated_spec.fetch("version") ).updated_requirements, previous_version: original_dep.version, previous_requirements: original_dep.requirements, package_manager: original_dep.package_manager ) end
bundler_version()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 147 def bundler_version @bundler_version ||= Helpers.bundler_version(lockfile) end
dependencies_from(updated_deps, specs)
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 79 def dependencies_from(updated_deps, specs) # You might think we'd want to remove dependencies whose version # hadn't changed from this array. We don't. We still need to unlock # them to get Bundler to resolve, because unlocking them is what # updates their subdependencies. # # This is kind of a bug in Bundler, and we should try to fix it, # but resolving it won't necessarily be easy. updated_deps.map do |dep| original_dep = original_dependencies.find { |d| d.name == dep.fetch("name") } spec = specs.find { |d| d.fetch("name") == dep.fetch("name") } next if spec.fetch("version") == original_dep.version build_dependency(original_dep, spec) end.compact end
force_update()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 48 def force_update in_a_native_bundler_context(error_handling: false) do |tmp_dir| updated_deps, specs = NativeHelpers.run_bundler_subprocess( bundler_version: bundler_version, function: "force_update", args: { dir: tmp_dir, dependency_name: dependency.name, target_version: target_version, credentials: credentials, gemfile_name: gemfile.name, lockfile_name: lockfile.name, update_multiple_dependencies: update_multiple_dependencies? } ) dependencies_from(updated_deps, specs) end rescue SharedHelpers::HelperSubprocessFailed => e msg = e.error_class + " with message: " + e.message raise Dependabot::DependencyFileNotResolvable, msg end
gemfile()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 122 def gemfile dependency_files.find { |f| f.name == "Gemfile" } || dependency_files.find { |f| f.name == "gems.rb" } end
lockfile()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 127 def lockfile dependency_files.find { |f| f.name == "Gemfile.lock" } || dependency_files.find { |f| f.name == "gems.locked" } end
original_dependencies()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 70 def original_dependencies @original_dependencies ||= FileParser.new( dependency_files: dependency_files, credentials: credentials, source: nil ).parse end
sanitized_lockfile_body()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 132 def sanitized_lockfile_body re = FileUpdater::LockfileUpdater::LOCKFILE_ENDING lockfile.content.gsub(re, "") end
source_for(dependency)
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 116 def source_for(dependency) dependency.requirements. find { |r| r.fetch(:source) }&. fetch(:source) end
update_multiple_dependencies?()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 44 def update_multiple_dependencies? @update_multiple_dependencies end
write_temporary_dependency_files()
click to toggle source
# File lib/dependabot/bundler/update_checker/force_updater.rb, line 137 def write_temporary_dependency_files dependency_files.each do |file| path = file.name FileUtils.mkdir_p(Pathname.new(path).dirname) File.write(path, file.content) end File.write(lockfile.name, sanitized_lockfile_body) if lockfile end