Class: MilkTea::PackageDependencySolver

Inherits:
Object
  • Object
show all
Defined in:
lib/milk_tea/packages/dependency_solver.rb

Defined Under Namespace

Classes: Solution, State

Instance Method Summary collapse

Constructor Details

#initialize(source_resolver:, registry_metadata_provider: PackageRegistryMetadataProvider.new, locked_registry_versions: nil) ⇒ PackageDependencySolver

Returns a new instance of PackageDependencySolver.



19
20
21
22
23
# File 'lib/milk_tea/packages/dependency_solver.rb', line 19

def initialize(source_resolver:, registry_metadata_provider: PackageRegistryMetadataProvider.new, locked_registry_versions: nil)
  @source_resolver = source_resolver
  @registry_metadata_provider = 
  @locked_registry_versions = normalize_locked_registry_versions(locked_registry_versions)
end

Instance Method Details

#solve(path_or_manifest) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/milk_tea/packages/dependency_solver.rb', line 25

def solve(path_or_manifest)
  root_manifest = path_or_manifest.is_a?(PackageManifest::DataView) ? path_or_manifest : PackageManifest.load(path_or_manifest)
  state = State.new(
    manifests_by_path: {},
    selected_registry_versions: {},
    processing_stack: [],
  )

  resolved_state = visit_manifest(root_manifest, state, source: @source_resolver.source_for_manifest(root_manifest))
  Solution.new(registry_versions: resolved_state.selected_registry_versions.transform_values(&:to_s).freeze)
rescue PackageManifestError, PackageRegistryMetadataProviderError, PackageSourceResolverError, PackageVersionError => e
  raise PackageDependencySolverError, e.message
end