Refactor state into a separate [Whenstate] module.
[whenjobs.git] / tools / whenjobs.ml
index 0810649..3383c91 100644 (file)
@@ -87,7 +87,7 @@ let rec main () =
     "--list", Arg.Unit (set_mode `List), " List the script";
     "--lib", Arg.Set_string libdir, "dir Specify directory that contains pa_when.cmo";
     "--set", Arg.Unit (set_mode `Set), " Set the variable";
-    "--type", Arg.Set_string typ, "bool|int|float|string Set the variable type";
+    "--type", Arg.Set_string typ, "bool|int|float|string|unit Set the variable type";
     "--upload", Arg.Unit (set_mode `Upload), " Upload the script";
     "--variables", Arg.Unit (set_mode `Variables), " Display all variables and values";
     "-V", Arg.Unit display_version, " Display version number and exit";
@@ -130,6 +130,7 @@ Options:
     | "string" -> `String
     | "int" -> `Int
     | "float"|"double" -> `Float
+    | "unit" -> `Unit
     | t ->
       eprintf "whenjobs: --type: unknown type (%s)\n" t;
       exit 1 in
@@ -248,7 +249,7 @@ and upload_file () =
   );
 
   (* Test-load the jobs file to ensure it makes sense. *)
-  Whenfile.init ();
+  Whenfile.init Whenstate.empty;
   (try
      Dynlink.loadfile cmo_file
    with
@@ -293,10 +294,22 @@ and set_variable name value typ =
        with Failure _ ->
          eprintf "whenjobs: variable is not a floating point number\n";
          exit 1
-      ) in
+      )
+    | `Unit ->
+      if value <> "" then (
+        eprintf "whenjobs: unit variables must be empty strings\n";
+        exit 1
+      );
+      `unit_t in
 
   let client = start_client () in
-  Whenproto_clnt.When.V1.set_variable client (name, value);
+  (match Whenproto_clnt.When.V1.set_variable client (name, value) with
+  | `ok -> ()
+  | `error msg ->
+    eprintf "whenjobs: set: %s\n" msg;
+    suggest_check_server_logs ();
+    exit 1
+  );
   stop_client client
 
 and get_variable name =
@@ -378,6 +391,7 @@ and stop_client client =
   Rpc_client.shut_down client
 
 and string_of_variable = function
+  | `unit_t -> ""
   | `bool_t b -> string_of_bool b
   | `string_t s -> s
   | `int_t i -> i (* passed on the wire as a string *)