Class: Dependabot::Uv::UpdateChecker::LockFileResolver

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/uv/update_checker/lock_file_resolver.rb

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, dependency_files:, credentials:, repo_contents_path: nil, security_advisories: [], ignored_versions: [], update_cooldown: nil) ⇒ LockFileResolver

Returns a new instance of LockFileResolver.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/dependabot/uv/update_checker/lock_file_resolver.rb', line 37

def initialize(
  dependency:,
  dependency_files:,
  credentials:,
  repo_contents_path: nil,
  security_advisories: [],
  ignored_versions: [],
  update_cooldown: nil
)
  @dependency = dependency
  @dependency_files = dependency_files
  @credentials = credentials
  @repo_contents_path = repo_contents_path
  @security_advisories = security_advisories
  @ignored_versions = ignored_versions
  @update_cooldown = update_cooldown
  @latest_resolvable_versions = T.let(
    {},
    T::Hash[String, T.nilable(Dependabot::Uv::Version)]
  )
  @resolved_versions = T.let(
    {},
    T::Hash[String, T.nilable(Dependabot::Uv::Version)]
  )
  @resolvable_versions = T.let({}, T::Hash[String, T::Boolean])
end

Instance Method Details

#latest_resolvable_version(requirement:) ⇒ Object



65
66
67
68
69
70
# File 'lib/dependabot/uv/update_checker/lock_file_resolver.rb', line 65

def latest_resolvable_version(requirement:)
  return nil unless requirement
  return @latest_resolvable_versions[requirement] if @latest_resolvable_versions.key?(requirement)

  @latest_resolvable_versions[requirement] = fetch_latest_resolvable_version(requirement)
end

#lowest_resolvable_security_fix_versionObject



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/dependabot/uv/update_checker/lock_file_resolver.rb', line 82

def lowest_resolvable_security_fix_version
  # Delegate to LatestVersionFinder which handles security advisory filtering
  fix_version = latest_version_finder.lowest_security_fix_version(
    language_version: python_version
  )
  return nil unless fix_version
  return nil unless resolvable?(version: fix_version)

  # Return the fix version cast to Uv::Version
  Uv::Version.new(fix_version.to_s)
end

#resolvable?(version:) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
76
77
78
79
# File 'lib/dependabot/uv/update_checker/lock_file_resolver.rb', line 73

def resolvable?(version:)
  target_version = Uv::Version.new(version.to_s)
  key = target_version.to_s
  return T.must(@resolvable_versions[key]) if @resolvable_versions.key?(key)

  @resolvable_versions[key] = resolved_version("==#{key}", target_version)&.to_s == key
end