class Dependabot::Python::FileUpdater::RequirementFileUpdater
def dependency
def dependency # For now, we'll only ever be updating a single dependency T.must(dependencies.first) end
def fetch_updated_dependency_files
def fetch_updated_dependency_files reqs = dependency.requirements.zip(dependency.previous_requirements || []) reqs.filter_map do |(new_req, old_req)| next if new_req == old_req file = T.must(get_original_file(new_req.fetch(:file))).dup updated_content = updated_requirement_or_setup_file_content(new_req, old_req) next if updated_content == file.content file.content = updated_content file end end
def get_original_file(filename)
def get_original_file(filename) dependency_files.find { |f| f.name == filename } end
def initialize(dependencies:, dependency_files:, credentials:, index_urls: nil)
def initialize(dependencies:, dependency_files:, credentials:, index_urls: nil) @dependencies = T.let(dependencies, T::Array[Dependabot::Dependency]) @dependency_files = T.let(dependency_files, T::Array[Dependabot::DependencyFile]) @credentials = T.let(credentials, T::Array[Dependabot::Credential]) @index_urls = T.let(index_urls, T.nilable(T::Array[T.nilable(String)])) @updated_dependency_files = T.let(nil, T.nilable(T::Array[Dependabot::DependencyFile])) end
def updated_dependency_files
def updated_dependency_files @updated_dependency_files ||= fetch_updated_dependency_files end
def updated_requirement_or_setup_file_content(new_req, old_req)
def updated_requirement_or_setup_file_content(new_req, old_req) original_file = get_original_file(new_req.fetch(:file)) raise "Could not find a dependency file for #{new_req}" unless original_file RequirementReplacer.new( content: T.must(original_file.content), dependency_name: dependency.name, old_requirement: old_req&.fetch(:requirement), new_requirement: new_req.fetch(:requirement), new_hash_version: dependency.version, index_urls: @index_urls ).updated_content end