@@ -34,25 +34,28 @@ let load_switch_config ?lock_kind gt switch =
3434 (OpamSwitch. to_string switch);
3535 OpamFile.Switch_config. empty)
3636
37- let get_available_packages gt switch switch_config ~opams =
38- OpamPackage.Map. filter (fun package opam ->
39- OpamFilter. eval_to_bool ~default: false
40- (OpamPackageVar. resolve_switch_raw ~package gt switch switch_config)
41- (OpamFile.OPAM. available opam))
42- opams
43-
44- let filter_pinned_packages ~pinned ~opams =
37+ let filter_available_packages gt switch switch_config ~opams =
38+ OpamPackage. keys @@
39+ OpamPackage.Map. filter (fun package opam ->
40+ OpamFilter. eval_to_bool ~default: false
41+ (OpamPackageVar. resolve_switch_raw ~package gt switch switch_config)
42+ (OpamFile.OPAM. available opam))
43+ opams
44+
45+ let compute_available_and_pinned_packages gt switch switch_config ~pinned ~opams =
4546 (* remove all versions of pinned packages, but the pinned-to version *)
4647 let pinned_names = OpamPackage. names_of_packages pinned in
47- OpamPackage.Map. filter
48- (fun nv _ ->
49- not (OpamPackage.Name.Set. mem nv.name pinned_names) ||
50- OpamPackage.Set. mem nv pinned)
51- opams
48+ let (opams, pinned) =
49+ OpamPackage.Map. partition
50+ (fun nv _ ->
51+ not (OpamPackage.Name.Set. mem nv.name pinned_names) ||
52+ OpamPackage.Set. mem nv pinned)
53+ opams
54+ in
55+ (filter_available_packages gt switch switch_config ~opams , pinned)
5256
5357let compute_available_packages gt switch switch_config ~pinned ~opams =
54- let opams = filter_pinned_packages ~pinned ~opams in
55- OpamPackage. keys @@ get_available_packages gt switch switch_config ~opams
58+ fst @@ compute_available_and_pinned_packages gt switch switch_config ~pinned ~opams
5659
5760let repos_list_raw rt switch_config =
5861 let global, repos =
@@ -116,7 +119,7 @@ let infer_switch_invariant_raw
116119 deps dmap
117120 in
118121 dmap)
119- (OpamPackage. packages_of_names ( Lazy. force available_packages) @@
122+ (OpamPackage. packages_of_names available_packages @@
120123 OpamPackage. names_of_packages @@
121124 compiler)
122125 OpamPackage.Map. empty
@@ -134,7 +137,7 @@ let infer_switch_invariant_raw
134137 match List. sort (fun (_ , c1 ) (_ , c2 ) -> compare c1 c2) counts with
135138 | (nv , _ ) :: _ ->
136139 let versions =
137- OpamPackage. packages_of_name ( Lazy. force available_packages) nv.name
140+ OpamPackage. packages_of_name available_packages nv.name
138141 in
139142 let n = OpamPackage.Set. cardinal versions in
140143 if n < = 1 then
@@ -154,9 +157,10 @@ let infer_switch_invariant st =
154157 st.installed
155158 else st.compiler_packages
156159 in
160+ let lazy available_packages = st.available_packages in
157161 infer_switch_invariant_raw
158162 st.switch_global st.switch st.switch_config st.opams
159- st.packages compiler_packages st.installed_roots st. available_packages
163+ st.packages compiler_packages st.installed_roots available_packages
160164
161165let depexts_raw ~env nv opams =
162166 try
@@ -331,7 +335,8 @@ let load lock_kind gt rt switch =
331335 OpamPackage.Map. union (fun _ x -> x) repos_package_index pinned_opams
332336 in
333337 let available_packages =
334- lazy (get_available_packages gt switch switch_config ~opams )
338+ lazy (compute_available_and_pinned_packages gt switch switch_config
339+ ~pinned ~opams )
335340 in
336341 let opams =
337342 (* Keep definitions of installed packages, but lowest priority, and after
@@ -402,8 +407,10 @@ let load lock_kind gt rt switch =
402407 match switch_config.invariant with
403408 | Some invariant -> switch_config, invariant
404409 | None ->
405- let available_packages = lazy (
406- OpamPackage. keys (Lazy. force available_packages))
410+ let available_packages =
411+ let lazy (available_packages , pinned ) = available_packages in
412+ OpamPackage.Set. union available_packages @@
413+ filter_available_packages gt switch switch_config ~opams: pinned
407414 in
408415 let invariant =
409416 infer_switch_invariant_raw
@@ -430,12 +437,6 @@ let load lock_kind gt rt switch =
430437 switch_config;
431438 switch_config, invariant
432439 in
433- let available_packages = lazy (
434- let available_without_pinned_alternates =
435- filter_pinned_packages ~pinned ~opams: (Lazy. force available_packages)
436- in
437- OpamPackage. keys available_without_pinned_alternates)
438- in
439440 let conf_files =
440441 let conf_files =
441442 OpamFilename. files (OpamPath.Switch. config_dir gt.root switch)
@@ -508,6 +509,7 @@ let load lock_kind gt rt switch =
508509 OpamPackage.Set. empty
509510 ) in
510511 (* depext check *)
512+ let available_packages = OpamCompat.Lazy. map fst available_packages in
511513 let sys_packages =
512514 if not (OpamFile.Config. depext gt.config)
513515 || OpamStateConfig. (! r.no_depexts) then
0 commit comments