38 lines
903 B
OCaml
38 lines
903 B
OCaml
|
|
open Import
|
||
|
|
module Client = Dune_rpc_client.Client
|
||
|
|
|
||
|
|
let send_shutdown cli =
|
||
|
|
let open Fiber.O in
|
||
|
|
let* decl =
|
||
|
|
Client.Versioned.prepare_notification
|
||
|
|
cli
|
||
|
|
Dune_rpc_private.Public.Notification.shutdown
|
||
|
|
in
|
||
|
|
match decl with
|
||
|
|
| Ok decl -> Client.notification cli decl ()
|
||
|
|
| Error e -> raise (Dune_rpc_private.Version_error.E e)
|
||
|
|
;;
|
||
|
|
|
||
|
|
let exec () =
|
||
|
|
let open Fiber.O in
|
||
|
|
let where = Rpc_common.active_server_exn () in
|
||
|
|
let* conn = Client.Connection.connect_exn where in
|
||
|
|
Dune_rpc_impl.Client.client
|
||
|
|
conn
|
||
|
|
~f:send_shutdown
|
||
|
|
(Dune_rpc_private.Initialize.Request.create
|
||
|
|
~id:(Dune_rpc_private.Id.make (Sexp.Atom "shutdown_cmd")))
|
||
|
|
;;
|
||
|
|
|
||
|
|
let info =
|
||
|
|
let doc = "Cancel and shutdown any builds in the current workspace." in
|
||
|
|
Cmd.info "shutdown" ~doc
|
||
|
|
;;
|
||
|
|
|
||
|
|
let term =
|
||
|
|
let+ builder = Common.Builder.term in
|
||
|
|
Rpc_common.client_term builder exec
|
||
|
|
;;
|
||
|
|
|
||
|
|
let command = Cmd.v info term
|