@@ -325,7 +325,7 @@ let cram_commmands commands =
325325 Buffer. contents buf
326326;;
327327
328- let create_sh_script cram_stanzas ~temp_dir : sh_script Fiber. t =
328+ let create_sh_script cram_stanzas ~temp_dir ~ setup_scripts : sh_script Fiber. t =
329329 let script = Path. relative temp_dir " main.sh" in
330330 let oc = Io. open_out ~binary: true script in
331331 Fiber. finalize ~finally: (fun () -> Fiber. return @@ close_out oc)
@@ -374,6 +374,15 @@ let create_sh_script cram_stanzas ~temp_dir : sh_script Fiber.t =
374374 }
375375 in
376376 fprln oc " trap 'exit 0' EXIT" ;
377+ let * () =
378+ Fiber. sequential_iter setup_scripts ~f: (fun (script_path : Path.t ) ->
379+ let + script_sh_path = sh_path script_path in
380+ fprln oc " . %s" script_sh_path;
381+ match script_path with
382+ | In_source_tree _ -> assert false
383+ | External _ -> ()
384+ | In_build_dir _ -> fprln oc " rm -f %s" script_sh_path)
385+ in
377386 let + cram_to_output = Fiber. sequential_map ~f: loop cram_stanzas in
378387 let command_count = ! i in
379388 let metadata_file = Option. some_if (command_count > 0 ) metadata_file in
@@ -413,9 +422,9 @@ let make_temp_dir ~script =
413422 temp_dir
414423;;
415424
416- let run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout =
425+ let run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout ~ setup_scripts =
417426 let open Fiber.O in
418- let * sh_script = create_sh_script cram_stanzas ~temp_dir in
427+ let * sh_script = create_sh_script cram_stanzas ~temp_dir ~setup_scripts in
419428 let env = make_run_env env ~temp_dir ~cwd in
420429 let open Fiber.O in
421430 let sh =
@@ -483,13 +492,13 @@ let run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout =
483492 (timeout_msg @ [ timeout_set_message ])
484493;;
485494
486- let run_produce_correction ~conflict_markers ~src ~env ~script ~timeout lexbuf =
495+ let run_produce_correction ~conflict_markers ~src ~env ~script ~timeout ~ setup_scripts lexbuf =
487496 let temp_dir = make_temp_dir ~script in
488497 let cram_stanzas = cram_stanzas lexbuf ~conflict_markers in
489498 let cwd = Path. parent_exn script in
490499 let env = make_run_env env ~temp_dir ~cwd in
491500 let open Fiber.O in
492- run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout
501+ run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout ~setup_scripts
493502 >> | compose_cram_output
494503;;
495504
@@ -502,7 +511,16 @@ module Script = Persistent.Make (struct
502511 let test_example () = []
503512 end )
504513
505- let run_and_produce_output ~conflict_markers ~src ~env ~dir :cwd ~script ~dst ~timeout =
514+ let run_and_produce_output
515+ ~conflict_markers
516+ ~src
517+ ~env
518+ ~dir :cwd
519+ ~script
520+ ~dst
521+ ~timeout
522+ ~setup_scripts
523+ =
506524 let script_contents = Io. read_file ~binary: false script in
507525 let lexbuf = Lexbuf. from_string script_contents ~fname: (Path. to_string script) in
508526 let temp_dir = make_temp_dir ~script in
@@ -512,7 +530,7 @@ let run_and_produce_output ~conflict_markers ~src ~env ~dir:cwd ~script ~dst ~ti
512530 let env = make_run_env env ~temp_dir ~cwd in
513531 let open Fiber.O in
514532 let + commands =
515- run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout
533+ run_cram_test env ~src ~script ~cram_stanzas ~temp_dir ~cwd ~timeout ~setup_scripts
516534 >> | List. filter_map ~f: (function
517535 | Cram_lexer. Command c -> Some c
518536 | Comment _ -> None )
@@ -530,28 +548,42 @@ module Run = struct
530548 ; script : 'path
531549 ; output : 'target
532550 ; timeout : (Loc .t * float ) option
551+ ; setup_scripts : 'path list
533552 }
534553
535554 let name = " cram-run"
536- let version = 2
537-
538- let bimap ({ src = _ ; dir; script; output; timeout } as t ) f g =
539- { t with dir = f dir; script = f script; output = g output; timeout }
555+ let version = 3
556+
557+ let bimap ({ src = _ ; dir; script; output; timeout; setup_scripts } as t ) f g =
558+ { t with
559+ dir = f dir
560+ ; script = f script
561+ ; output = g output
562+ ; timeout
563+ ; setup_scripts = List. map ~f setup_scripts
564+ }
540565 ;;
541566
542567 let is_useful_to ~memoize :_ = true
543568
544- let encode { src = _ ; dir; script; output; timeout } path target : Sexp.t =
569+ let encode { src = _ ; dir; script; output; timeout; setup_scripts } path target
570+ : Sexp. t
571+ =
545572 List
546573 [ path dir
547574 ; path script
548575 ; target output
549576 ; Dune_sexp.Encoder. (option float (Option. map ~f: snd timeout))
550577 |> Dune_sexp. to_sexp
578+ ; List (List. map ~f: path setup_scripts)
551579 ]
552580 ;;
553581
554- let action { src; dir; script; output; timeout } ~ectx :_ ~(eenv : Action.env ) =
582+ let action
583+ { src; dir; script; output; timeout; setup_scripts }
584+ ~ectx :_
585+ ~(eenv : Action.env )
586+ =
555587 run_and_produce_output
556588 ~conflict_markers: Ignore
557589 ~src
@@ -560,14 +592,15 @@ module Run = struct
560592 ~script
561593 ~dst: output
562594 ~timeout
595+ ~setup_scripts
563596 ;;
564597 end
565598
566599 include Action_ext. Make (Spec )
567600end
568601
569- let run ~src ~dir ~script ~output ~timeout =
570- Run. action { src; dir; script; output; timeout }
602+ let run ~src ~dir ~script ~output ~timeout ~ setup_scripts =
603+ Run. action { src; dir; script; output; timeout; setup_scripts }
571604;;
572605
573606module Make_script = struct
@@ -688,7 +721,8 @@ module Action = struct
688721 ~src: script
689722 ~env: eenv.env
690723 ~script
691- ~timeout: None )
724+ ~timeout: None
725+ ~setup_scripts: [] )
692726 ;;
693727 end
694728
0 commit comments