Skip to content

Commit

Permalink
Pass orphans to opamSolver.resolve
Browse files Browse the repository at this point in the history
  • Loading branch information
AltGr committed Jul 18, 2014
1 parent d89a7a9 commit 87c0c58
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 17 deletions.
17 changes: 14 additions & 3 deletions src/client/opamClient.ml
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,7 @@ module API = struct
requested,
action,
OpamSolution.resolve t action ~requested
~orphans:(full_orphans ++ orphan_versions)
(preprocess_request t full_orphans orphan_versions
{ wish_install = [];
wish_remove = [];
Expand Down Expand Up @@ -733,6 +734,7 @@ module API = struct
requested,
action,
OpamSolution.resolve t action ~requested
~orphans:(full_orphans ++ orphan_versions)
(preprocess_request t full_orphans orphan_versions
{ wish_install = OpamSolution.eq_atoms_of_packages installed_roots;
wish_remove = [];
Expand Down Expand Up @@ -779,11 +781,12 @@ module API = struct
or install aspcud or another solver on your system.\n";
OpamGlobals.exit 1)
else
let t, _full_orphans, _orphan_versions = orphans ~transitive:true t in
let t, full_orphans, orphan_versions = orphans ~transitive:true t in
let requested = OpamPackage.Name.Set.empty in
let action = Upgrade OpamPackage.Set.empty in
let solution =
OpamSolution.resolve_and_apply ~ask:true t action ~requested
~orphans:(full_orphans ++ orphan_versions)
{ wish_install = [];
wish_remove = [];
wish_upgrade = [];
Expand Down Expand Up @@ -1074,6 +1077,7 @@ module API = struct
let solution =
OpamSolution.resolve_and_apply ~ask:false t (Init compiler_names)
~requested:compiler_names
~orphans:OpamPackage.Set.empty
{ wish_install = [];
wish_remove = [];
wish_upgrade = compiler_packages;
Expand Down Expand Up @@ -1199,7 +1203,11 @@ module API = struct
if add_to_roots = Some false || deps_only then
Install OpamPackage.Name.Set.empty
else Install names in
let solution = OpamSolution.resolve t action ~requested:names request in
let solution =
OpamSolution.resolve t action
~requested:names
~orphans:(full_orphans ++ orphan_versions)
request in
let solution = match solution with
| Conflicts cs ->
log "conflict!";
Expand Down Expand Up @@ -1316,7 +1324,9 @@ module API = struct
(OpamSolver.dependencies
~depopts:true ~installed:true universe to_remove))
else to_remove in
let solution = OpamSolution.resolve_and_apply ?ask t Remove ~requested
let solution =
OpamSolution.resolve_and_apply ?ask t Remove ~requested
~orphans:(full_orphans ++ orphan_versions)
{ wish_install = OpamSolution.eq_atoms_of_packages to_keep;
wish_remove = OpamSolution.atoms_of_packages to_remove;
wish_upgrade = [];
Expand Down Expand Up @@ -1371,6 +1381,7 @@ module API = struct

let solution =
OpamSolution.resolve_and_apply ?ask t (Reinstall reinstall) ~requested
~orphans:(full_orphans ++ orphan_versions)
request in

OpamSolution.check_solution t solution
Expand Down
9 changes: 5 additions & 4 deletions src/client/opamSolution.ml
Original file line number Diff line number Diff line change
Expand Up @@ -621,11 +621,12 @@ let apply ?ask t action ~requested solution =
Aborted
)

let resolve ?(verbose=true) t action ~requested request =
OpamSolver.resolve ~verbose (OpamState.universe t action) ~requested request
let resolve ?(verbose=true) t action ~requested ~orphans request =
OpamSolver.resolve ~verbose (OpamState.universe t action)
~requested ~orphans request

let resolve_and_apply ?ask t action ~requested request =
match resolve t action ~requested request with
let resolve_and_apply ?ask t action ~requested ~orphans request =
match resolve t action ~requested ~orphans request with
| Conflicts cs ->
log "conflict!";
OpamGlobals.msg "%s"
Expand Down
4 changes: 3 additions & 1 deletion src/client/opamSolution.mli
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ val resolve:
?verbose:bool ->
OpamState.state ->
user_action ->
requested:OpamPackage.Name.Set.t ->
requested:name_set ->
orphans:package_set ->
atom request ->
(OpamSolver.solution, OpamCudf.conflict) result

Expand All @@ -46,6 +47,7 @@ val resolve_and_apply:
OpamState.state ->
user_action ->
requested:OpamPackage.Name.Set.t ->
orphans:package_set ->
atom request ->
solver_result

Expand Down
4 changes: 3 additions & 1 deletion src/client/opamSwitchCommand.ml
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,8 @@ let install_packages ~packages switch compiler =
match bad_packages with
| [] ->
let solution = OpamSolution.resolve_and_apply ~ask:false t (Switch roots)
~requested:roots
~requested:roots
~orphans:OpamPackage.Set.empty
{ wish_install = [];
wish_remove = [];
wish_upgrade = to_install;
Expand Down Expand Up @@ -372,6 +373,7 @@ let import_t importfile t =

OpamSolution.resolve_and_apply t (Import roots)
~requested:(OpamPackage.names_of_packages imported)
~orphans:OpamPackage.Set.empty
{ wish_install = to_import;
wish_remove = [];
wish_upgrade = [];
Expand Down
4 changes: 3 additions & 1 deletion src/scripts/opam_mk_repo.ml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,9 @@ let resolve_deps index names =
} in
let request = { wish_install = atoms; wish_remove = []; wish_upgrade = [];
criteria = !OpamGlobals.solver_preferences; } in
match OpamSolver.resolve ~verbose:true universe ~requested request with
match OpamSolver.resolve ~verbose:true universe ~requested
~orphans:OpamPackage.Set.empty request
with
| Success solution ->
OpamSolver.ActionGraph.fold_vertex (fun act acc -> match act with
| To_change (_, p) -> OpamPackage.Set.add p acc
Expand Down
11 changes: 5 additions & 6 deletions src/solver/opamSolver.ml
Original file line number Diff line number Diff line change
Expand Up @@ -277,19 +277,18 @@ let cycle_conflict univ cycles =
(fun a -> Action.to_string (map_action OpamCudf.cudf2opam a)))
cycles)

let resolve ?(verbose=true) universe ~requested request =
let resolve ?(verbose=true) universe ~requested ~orphans request =
log "resolve request=%a" (slog string_of_request) request;
let version_map =
cudf_versions_map universe (universe.u_available ++ universe.u_installed) in
let simple_universe =
load_cudf_universe universe ~version_map universe.u_available in
load_cudf_universe universe ~version_map
(universe.u_available ++ universe.u_installed -- orphans) in
let request = cleanup_request universe request in
let cudf_request = map_request (atom2cudf universe version_map) request in
let orphan_packages =
universe.u_installed -- universe.u_available -- universe.u_pinned in
let add_orphan_packages u =
load_cudf_universe universe ~version_map
(orphan_packages ++
(orphans ++
(OpamPackage.Set.of_list
(List.map OpamCudf.cudf2opam (Cudf.get_packages u)))) in
let resolve u req =
Expand All @@ -306,7 +305,7 @@ let resolve ?(verbose=true) universe ~requested request =
| Conflicts _ as c -> c
| Success actions ->
let all_packages =
universe.u_available ++ orphan_packages in
universe.u_available ++ orphans in
let simple_universe =
load_cudf_universe universe ~depopts:true ~build:false
~version_map all_packages in
Expand Down
2 changes: 1 addition & 1 deletion src/solver/opamSolver.mli
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ val load_cudf_universe:
consistency of the initial description. *)
val resolve :
?verbose:bool ->
universe -> requested:OpamPackage.Name.Set.t -> atom request
universe -> requested:name_set -> orphans:package_set -> atom request
-> (solution, OpamCudf.conflict) result

(** Keep only the packages that are installable. *)
Expand Down

0 comments on commit 87c0c58

Please sign in to comment.