Source file how_to_run.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
open! Core
open Async
type t =
env:(string * string) list
-> worker_command_args:string list
-> wrap:(Prog_and_args.t -> Prog_and_args.t)
-> Process.t Or_error.t Deferred.t
let local ~env ~worker_command_args ~wrap =
let { Prog_and_args.prog; args } =
wrap { Prog_and_args.prog = Utils.our_binary (); args = worker_command_args }
in
Process.create ~prog ~argv0:(Sys.get_argv ()).(0) ~args ~env:(`Extend env) ()
;;
let remote exec ~env ~worker_command_args ~wrap =
Remote_executable.run exec ~env ~args:worker_command_args ~wrap
;;
let wrap t ~f ~env ~worker_command_args ~wrap =
t ~env ~worker_command_args ~wrap:(fun prog_and_args -> f (wrap prog_and_args))
;;
let run t ~env ~worker_command_args = t ~env ~worker_command_args ~wrap:Fn.id