@@ -148,11 +148,9 @@ module Context = struct
148148 let available = OpamFile.OPAM. available opam in
149149 match
150150 OpamFilter. partial_eval
151- (add_self_to_filter_env
152- package
153- (Solver_stats.Updater. wrap_env
154- t.stats_updater
155- (Solver_env. to_env t.solver_env)))
151+ (Solver_env. to_env t.solver_env
152+ |> Solver_stats.Updater. wrap_env t.stats_updater
153+ |> add_self_to_filter_env package)
156154 available
157155 |> eval_to_bool
158156 with
@@ -244,30 +242,34 @@ module Context = struct
244242 ;;
245243
246244 let filter_deps t package filtered_formula =
247- let name = OpamPackage. name package |> Package_name. of_opam_package_name in
248245 (* Add additional constraints to the formula. This works in two steps.
249246 First identify all the additional constraints applied to packages which
250247 appear in the current package's dependency formula. Then each additional
251248 constnraint is and-ed with the current package's dependency formula. *)
252249 let filtered_formula =
253250 OpamFormula. fold_left
254251 (fun additional_formulae (pkg , _ ) ->
255- let name = Package_name. of_opam_package_name pkg in
256- match Package_name.Map. find t.constraints name with
252+ match
253+ Package_name. of_opam_package_name pkg |> Package_name.Map. find t.constraints
254+ with
257255 | None -> additional_formulae
258256 | Some additional -> additional :: additional_formulae)
259257 []
260258 filtered_formula
261259 |> List. fold_left ~init: filtered_formula ~f: (fun additional acc ->
262260 OpamFormula. And (acc, additional))
263261 in
264- let package_is_local = Package_name.Map. mem t.local_packages name in
265- Resolve_opam_formula. apply_filter
266- (add_self_to_filter_env
267- package
268- (Solver_stats.Updater. wrap_env t.stats_updater (Solver_env. to_env t.solver_env)))
269- ~with_test: package_is_local
270- filtered_formula
262+ let package_is_local =
263+ OpamPackage. name package
264+ |> Package_name. of_opam_package_name
265+ |> Package_name.Map. mem t.local_packages
266+ in
267+ Solver_env. to_env t.solver_env
268+ |> Solver_stats.Updater. wrap_env t.stats_updater
269+ |> add_self_to_filter_env package
270+ |> Resolve_opam_formula. apply_filter
271+ ~with_test: package_is_local
272+ ~formula: filtered_formula
271273 ;;
272274
273275 let count_expanded_packages t = Table. fold t.expanded_packages ~init: 0 ~f: ( + )
@@ -701,13 +703,13 @@ module Solver = struct
701703 let + () =
702704 let rec lookup_impl expand_deps role =
703705 let impls = ref [] in
704- let * clause =
706+ let * candidates =
705707 Fiber_cache. find_or_add impl_cache role ~f: (fun () ->
706- let + clause , impls' =
708+ let + candidates , impls' =
707709 Candidates. make_impl_clause sat context ~dummy_impl role
708710 in
709711 impls := impls';
710- clause )
712+ candidates )
711713 in
712714 let + () =
713715 Fiber. parallel_iter ! impls ~f: (fun { var = impl_var ; impl } ->
@@ -727,7 +729,7 @@ module Solver = struct
727729 deferred := (impl_var, dep) :: ! deferred;
728730 Fiber. return () ))
729731 in
730- clause
732+ candidates
731733 and process_dep expand_deps user_var (dep : Input.dependency ) : unit Fiber.t =
732734 (* Process a dependency of [user_var]:
733735 - find the candidate implementations to satisfy it
@@ -807,8 +809,10 @@ module Solver = struct
807809 3) we follow every dependency of every selected implementation
808810 *)
809811 let sat = Sat. create () in
810- let dummy_impl = if closest_match then Some Input. Dummy else None in
811- let * impl_clauses = build_problem context root_req sat ~dummy_impl in
812+ let * impl_clauses =
813+ let dummy_impl = if closest_match then Some Input. Dummy else None in
814+ build_problem context root_req sat ~dummy_impl
815+ in
812816 let + impl_clauses = Fiber_cache. to_table impl_clauses in
813817 (* Run the solve *)
814818 let decider () =
@@ -846,9 +850,7 @@ module Solver = struct
846850 Some
847851 (Table. to_list impl_clauses
848852 |> List. filter_map ~f: (fun (key , v ) ->
849- match Candidates. selected v with
850- | None -> None
851- | Some v -> Some (key, v))
853+ Candidates. selected v |> Option. map ~f: (fun v -> key, v))
852854 |> Input.Role.Map. of_list_exn)
853855 ;;
854856 end
@@ -1634,8 +1636,8 @@ let opam_package_to_lock_file_pkg
16341636 let resolve what =
16351637 Resolve_opam_formula. filtered_formula_to_package_names
16361638 ~with_test: false
1637- (add_self_to_filter_env opam_package ( Solver_env. to_env solver_env))
1638- version_by_package_name
1639+ ~packages: version_by_package_name
1640+ ~env: (add_self_to_filter_env opam_package ( Solver_env. to_env solver_env))
16391641 what
16401642 in
16411643 let depends =
@@ -1802,9 +1804,7 @@ let reject_unreachable_packages =
18021804 " package is both local and returned by solver"
18031805 [ " name" , Package_name. to_dyn name ]
18041806 | Some (lock_dir_pkg : Lock_dir.Pkg.t ), None -> Some lock_dir_pkg.info.version
1805- | None , Some _pkg ->
1806- let version = Package_version. of_string " dev" in
1807- Some version)
1807+ | None , Some _pkg -> Some Package_version. dev)
18081808 in
18091809 let pkgs_by_name =
18101810 Package_name.Map. merge pkgs_by_name local_packages ~f: (fun name lhs rhs ->
@@ -1816,21 +1816,24 @@ let reject_unreachable_packages =
18161816 [ " name" , Package_name. to_dyn name ]
18171817 | Some (pkg : Lock_dir.Pkg.t ), None -> Some (List. map pkg.depends ~f: snd)
18181818 | None , Some (pkg : Local_package.For_solver.t ) ->
1819- let formula = Dependency_formula. to_filtered_formula pkg.dependencies in
1820- (* Use `dev` because at this point we don't have any version *)
1821- let opam_package =
1822- OpamPackage. of_string (sprintf " %s.dev" (Package_name. to_string pkg.name))
1823- in
1824- let env = add_self_to_filter_env opam_package (Solver_env. to_env solver_env) in
1825- let resolved =
1826- Resolve_opam_formula. filtered_formula_to_package_names
1827- env
1828- ~with_test: true
1829- (Package_name.Map. set pkgs_by_version Dune_dep. name dune_version)
1830- formula
1831- in
18321819 let deps =
1833- match resolved with
1820+ match
1821+ let env =
1822+ let opam_package =
1823+ OpamPackage. create
1824+ (Package_name. to_opam_package_name pkg.name)
1825+ (* Use [dev] because at this point we don't have any version *)
1826+ (Package_version. to_opam_package_version Package_version. dev)
1827+ in
1828+ Solver_env. to_env solver_env |> add_self_to_filter_env opam_package
1829+ in
1830+ Dependency_formula. to_filtered_formula pkg.dependencies
1831+ |> Resolve_opam_formula. filtered_formula_to_package_names
1832+ ~env
1833+ ~with_test: true
1834+ ~packages:
1835+ (Package_name.Map. set pkgs_by_version Dune_dep. name dune_version)
1836+ with
18341837 | Ok { regular; post = _ (* discard post deps *) } ->
18351838 (* remove Dune from the formula as we remove it from solutions *)
18361839 List. filter regular ~f: (fun pkg ->
0 commit comments