Class: Dependabot::Maven::UpdateChecker
- Inherits:
-
UpdateCheckers::Base
- Object
- UpdateCheckers::Base
- Dependabot::Maven::UpdateChecker
- Defined in:
- lib/dependabot/maven/update_checker.rb,
lib/dependabot/maven/update_checker/version_finder.rb,
lib/dependabot/maven/update_checker/property_updater.rb,
lib/dependabot/maven/update_checker/requirements_updater.rb
Defined Under Namespace
Classes: PropertyUpdater, RequirementsUpdater, VersionFinder
Instance Method Summary collapse
-
#initialize(dependency:, dependency_files:, credentials:, repo_contents_path: nil, ignored_versions: [], raise_on_ignored: false, security_advisories: [], requirements_update_strategy: nil, dependency_group: nil, update_cooldown: nil, options: {}) ⇒ UpdateChecker
constructor
A new instance of UpdateChecker.
- #latest_resolvable_version ⇒ Object
- #latest_resolvable_version_with_no_unlock ⇒ Object
- #latest_version ⇒ Object
- #lowest_resolvable_security_fix_version ⇒ Object
- #lowest_security_fix_version ⇒ Object
- #requirements_unlocked_or_can_be? ⇒ Boolean
- #updated_requirements ⇒ Object
Constructor Details
#initialize(dependency:, dependency_files:, credentials:, repo_contents_path: nil, ignored_versions: [], raise_on_ignored: false, security_advisories: [], requirements_update_strategy: nil, dependency_group: nil, update_cooldown: nil, options: {}) ⇒ UpdateChecker
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/dependabot/maven/update_checker.rb', line 31 def initialize( dependency:, dependency_files:, credentials:, repo_contents_path: nil, ignored_versions: [], raise_on_ignored: false, security_advisories: [], requirements_update_strategy: nil, dependency_group: nil, update_cooldown: nil, options: {} ) super @version_finder = T.let(nil, T.nilable(VersionFinder)) @property_updater = T.let(nil, T.nilable(PropertyUpdater)) @property_value_finder = T.let(nil, T.nilable(Maven::FileParser::PropertyValueFinder)) @declarations_using_a_property = T.let(nil, T.nilable(T::Array[T::Hash[Symbol, T.untyped]])) @all_property_based_dependencies = T.let(nil, T.nilable(T::Array[Dependabot::Dependency])) end |
Instance Method Details
#latest_resolvable_version ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/dependabot/maven/update_checker.rb', line 59 def latest_resolvable_version # Maven's version resolution algorithm is very simple: it just uses # the version defined "closest", with the first declaration winning # if two declarations are equally close. As a result, we can just # return that latest version unless dealing with a property dep. # https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Transitive_Dependencies return nil if version_comes_from_multi_dependency_property? latest_version end |
#latest_resolvable_version_with_no_unlock ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/dependabot/maven/update_checker.rb', line 81 def latest_resolvable_version_with_no_unlock # Irrelevant, since Maven has a single dependency file (the pom.xml). # # For completeness we ought to resolve the pom.xml and return the # latest version that satisfies the current constraint AND any # constraints placed on it by other dependencies. Seeing as we're # never going to take any action as a result, though, we just return # nil. nil end |
#latest_version ⇒ Object
54 55 56 |
# File 'lib/dependabot/maven/update_checker.rb', line 54 def latest_version latest_version_details&.fetch(:version) end |
#lowest_resolvable_security_fix_version ⇒ Object
76 77 78 |
# File 'lib/dependabot/maven/update_checker.rb', line 76 def lowest_resolvable_security_fix_version lowest_security_fix_version end |
#lowest_security_fix_version ⇒ Object
71 72 73 |
# File 'lib/dependabot/maven/update_checker.rb', line 71 def lowest_security_fix_version lowest_security_fix_version_details&.fetch(:version) end |
#requirements_unlocked_or_can_be? ⇒ Boolean
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/dependabot/maven/update_checker.rb', line 107 def requirements_unlocked_or_can_be? declarations_using_a_property.none? do |requirement| prop_name = requirement.dig(:metadata, :property_name) pom = dependency_files.find { |f| f.name == requirement[:file] } return false unless prop_name && pom declaration_pom_name = property_value_finder .property_details(property_name: prop_name, callsite_pom: pom) &.fetch(:file) declaration_pom_name == "remote_pom.xml" end end |
#updated_requirements ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/dependabot/maven/update_checker.rb', line 93 def updated_requirements property_names = declarations_using_a_property .map { |req| req.dig(:metadata, :property_name) } RequirementsUpdater.new( requirements: dependency.requirements, latest_version: preferred_resolvable_version&.to_s, source_url: preferred_version_details&.fetch(:source_url), properties_to_update: property_names ).updated_requirements end |