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