@@ -22,46 +22,47 @@ let maybe_clear_screen
2222 [ Pp. nop; Pp. tag User_message.Style. Success (Pp. verbatim message); Pp. nop ]))
2323;;
2424
25- let on_event ~terminal_persistence = function
25+ let set_overlay overlay message =
26+ Option. iter ! overlay ~f: Console.Status_line. remove_overlay;
27+ overlay := Some (Console.Status_line. add_overlay (Constant message))
28+ ;;
29+
30+ let clear_overlay overlay =
31+ Option. iter ! overlay ~f: Console.Status_line. remove_overlay;
32+ overlay := None
33+ ;;
34+
35+ let on_event overlay ~terminal_persistence = function
2636 | Run.Event. Tick -> Console.Status_line. refresh ()
2737 | Source_files_changed { details_hum } ->
28- maybe_clear_screen ~terminal_persistence ~details_hum
38+ maybe_clear_screen ~terminal_persistence ~details_hum ;
39+ clear_overlay overlay
2940 | Build_interrupted ->
30- Console.Status_line. set
31- (Live
32- (fun () ->
33- let progression =
34- match Fiber.Svar. read Build_system. state with
35- | Initializing
36- | Restarting_current_build
37- | Build_succeeded__now_waiting_for_changes
38- | Build_failed__now_waiting_for_changes -> Build_system.Progress. init
39- | Building progress -> progress
40- in
41- Pp. seq
42- (Pp. tag User_message.Style. Error (Pp. verbatim " Source files changed" ))
43- (Pp. verbatim
44- (sprintf
45- " , restarting current build... (%u/%u)"
46- progression.number_of_rules_executed
47- progression.number_of_rules_discovered))))
41+ set_overlay
42+ overlay
43+ (Pp. tag User_message.Style. Error (Pp. verbatim " Restarting current build..." ))
4844 | Build_finish build_result ->
4945 let message =
5046 match build_result with
51- | Success -> Pp. tag User_message.Style. Success (Pp. verbatim " Success" )
47+ | Success ->
48+ Pp. seq
49+ (Pp. tag User_message.Style. Success (Pp. verbatim " Success" ))
50+ (Pp. verbatim " , waiting for filesystem changes..." )
5251 | Failure ->
52+ let error_count =
53+ Build_system_error. (
54+ Id.Map. cardinal (Set. current (Fiber.Svar. read Build_system. errors)))
55+ in
5356 let failure_message =
54- match
55- Build_system_error. (
56- Id.Map. cardinal (Set. current (Fiber.Svar. read Build_system. errors)))
57- with
57+ match error_count with
5858 | 1 -> Pp. textf " Had 1 error"
5959 | n -> Pp. textf " Had %d errors" n
6060 in
61- Pp. tag User_message.Style. Error failure_message
61+ Pp. seq
62+ (Pp. tag User_message.Style. Error failure_message)
63+ (Pp. verbatim " , waiting for filesystem changes..." )
6264 in
63- Console.Status_line. set
64- (Constant (Pp. seq message (Pp. verbatim " , waiting for filesystem changes..." )))
65+ set_overlay overlay message
6566;;
6667
6768let rpc server =
@@ -79,14 +80,27 @@ let no_build_no_rpc ~config:dune_config f =
7980 Run. go config ~on_event: (fun _ -> () ) f
8081;;
8182
83+ let run_with_watch_status ~terminal_persistence f =
84+ let overlay = ref None in
85+ Exn. protect
86+ ~f: (fun () ->
87+ let on_event = on_event overlay ~terminal_persistence in
88+ f on_event)
89+ ~finally: (fun () -> clear_overlay overlay)
90+ ;;
91+
8292let go_without_rpc_server ~(common : Common.t ) ~config :dune_config f =
8393 let config =
8494 let watch_exclusions = Common. watch_exclusions common in
8595 Dune_config. for_scheduler dune_config ~print_ctrl_c_warning: true ~watch_exclusions
8696 in
8797 Dune_rules.Clflags. concurrency := config.concurrency;
88- let on_event = on_event ~terminal_persistence: dune_config.terminal_persistence in
89- Run. go config ~on_event f
98+ match Common. watch common with
99+ | No -> Run. go config ~on_event: (fun _ -> () ) f
100+ | Yes _ ->
101+ run_with_watch_status
102+ ~terminal_persistence: dune_config.terminal_persistence
103+ (fun on_event -> Run. go config ~on_event f)
90104;;
91105
92106let go_with_rpc_server ~common ~config f =
@@ -121,9 +135,7 @@ let go_with_rpc_server_and_console_status_reporting
121135 let * () = Root.Rpc.Global. ensure_ready () in
122136 run ()
123137 in
124- Run. go
125- config
126- ~file_watcher
127- ~on_event: (on_event ~terminal_persistence: dune_config.terminal_persistence)
128- run
138+ run_with_watch_status
139+ ~terminal_persistence: dune_config.terminal_persistence
140+ (fun on_event -> Run. go config ~file_watcher ~on_event run)
129141;;
0 commit comments