Skip to content

Commit 89a43e2

Browse files
authored
Merge pull request #5994 from dra27/exposing-depexts
API: Allow explicit installation of system packages
2 parents 93737bf + e79e6f5 commit 89a43e2

File tree

3 files changed

+45
-27
lines changed

3 files changed

+45
-27
lines changed

master_changes.md

+2
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ users)
166166
# API updates
167167
## opam-client
168168
* `OpamClient.init` and `OpamClient.reinit`: now can have additional cygwin packages to install [#5930 @moyodiallo]
169+
* Expose `OpamSolution.print_depext_msg` [#5994 @dra27]
170+
* Extracted `OpamSolution.install_sys_packages` from `OpamSolution.install_depexts` [#5994 @dra27]
169171

170172
## opam-repository
171173

src/client/opamSolution.ml

+31-25
Original file line numberDiff line numberDiff line change
@@ -1146,34 +1146,11 @@ let get_depexts ?(force=false) ?(recover=false) t packages =
11461146
print_depext_msg (avail, nf);
11471147
avail
11481148

1149-
let install_depexts ?(force_depext=false) ?(confirm=true) t packages =
1150-
let confirm =
1151-
confirm && not (OpamSysInteract.Cygwin.is_internal t.switch_global.config)
1152-
in
1153-
let sys_packages =
1154-
get_depexts ~force:force_depext ~recover:force_depext t packages
1155-
in
1156-
let env = t.switch_global.global_variables in
1157-
let config = t.switch_global.config in
1158-
let map_sysmap f t =
1159-
let sys_packages =
1160-
OpamPackage.Set.fold (fun nv sys_map ->
1161-
match OpamPackage.Map.find_opt nv sys_map with
1162-
| Some status ->
1163-
OpamPackage.Map.add
1164-
nv { status with OpamSysPkg.s_available =
1165-
f status.OpamSysPkg.s_available }
1166-
sys_map
1167-
| None -> sys_map)
1168-
packages
1169-
(Lazy.force t.sys_packages)
1170-
in
1171-
{ t with sys_packages = lazy sys_packages }
1172-
in
1149+
let install_sys_packages ~map_sysmap ~confirm env config sys_packages t =
11731150
let rec entry_point t sys_packages =
11741151
if OpamClientConfig.(!r.fake) then
11751152
(print_command sys_packages; t)
1176-
else if OpamFile.Config.depext_run_installs t.switch_global.config then
1153+
else if OpamFile.Config.depext_run_installs config then
11771154
if confirm then menu t sys_packages else auto_install t sys_packages
11781155
else
11791156
manual_install t sys_packages
@@ -1297,6 +1274,35 @@ let install_depexts ?(force_depext=false) ?(confirm=true) t packages =
12971274
entry_point t sys_packages
12981275
with Sys.Break as e -> OpamStd.Exn.finalise e give_up_msg
12991276

1277+
let install_depexts ?(force_depext=false) ?(confirm=true) t packages =
1278+
let map_sysmap f t =
1279+
let sys_packages =
1280+
OpamPackage.Set.fold (fun nv sys_map ->
1281+
match OpamPackage.Map.find_opt nv sys_map with
1282+
| Some status ->
1283+
OpamPackage.Map.add
1284+
nv { status with OpamSysPkg.s_available =
1285+
f status.OpamSysPkg.s_available }
1286+
sys_map
1287+
| None -> sys_map)
1288+
packages
1289+
(Lazy.force t.sys_packages)
1290+
in
1291+
{ t with sys_packages = lazy sys_packages }
1292+
in
1293+
let confirm =
1294+
confirm && not (OpamSysInteract.Cygwin.is_internal t.switch_global.config)
1295+
in
1296+
let sys_packages =
1297+
get_depexts ~force:force_depext ~recover:force_depext t packages
1298+
in
1299+
let env = t.switch_global.global_variables in
1300+
let config = t.switch_global.config in
1301+
install_sys_packages ~map_sysmap ~confirm env config sys_packages t
1302+
1303+
let install_sys_packages ~confirm =
1304+
install_sys_packages ~map_sysmap:(fun _ () -> ()) ~confirm
1305+
13001306
(* Apply a solution *)
13011307
let apply ?ask t ~requested ?print_requested ?add_roots
13021308
?(skip=OpamPackage.Map.empty)

src/client/opamSolution.mli

+12-2
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,22 @@ val check_solution:
7575
without actually performing the action(s) on disk. *)
7676
val dry_run: 'a switch_state -> OpamSolver.solution -> 'a switch_state
7777

78+
(** Given [(available, not_found)] (see {!OpamSysInteract.packages_status}),
79+
displays appropriate warnings/messages on the console if either set is
80+
non-empty. *)
81+
val print_depext_msg : OpamSysPkg.Set.t * OpamSysPkg.Set.t -> unit
82+
83+
(** As {!install_depexts}, but supplied with a set of system packages to be
84+
installed. *)
85+
val install_sys_packages: confirm:bool -> OpamStateTypes.gt_variables ->
86+
OpamFile.Config.t -> OpamSysPkg.Set.t -> unit -> unit
87+
7888
(* Install external dependencies of the given package set, according the depext
7989
configuration. If [confirm] is false, install commands are directly
8090
launched, without asking user (used by the `--depext-only` option). If
8191
[force_depext] is true, it overrides [OpamFile.Config.depext] value. *)
82-
val install_depexts:
83-
?force_depext:bool -> ?confirm:bool -> rw switch_state -> package_set -> rw switch_state
92+
val install_depexts: ?force_depext:bool -> ?confirm:bool -> rw switch_state ->
93+
package_set -> rw switch_state
8494

8595
(** {2 Atoms} *)
8696

0 commit comments

Comments
 (0)