On goal failure, exit with correct error message and error code.
authorRichard W.M. Jones <rjones@redhat.com>
Tue, 17 Sep 2013 17:15:24 +0000 (18:15 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 17 Sep 2013 17:15:24 +0000 (18:15 +0100)
goaljobs.ml

index 6875ca5..4a66780 100644 (file)
@@ -428,8 +428,18 @@ let goal_memory_exists k =
     goal_failed msg
   )
 
+let guard fn arg =
+  try fn arg; true
+  with
+  | Goal_result (Goal_failed msg) ->
+    prerr_endline ("error: " ^ msg);
+    false
+  | exn ->
+    prerr_endline (Printexc.to_string exn);
+    false
+
 (* Run the program. *)
-let init () =
+let rec init () =
   let prog = Sys.executable_name in
   let prog = Filename.basename prog in
 
@@ -474,10 +484,11 @@ Options:
   let args = List.rev !args in
 
   (* Was a goal named on the command line? *)
-  match args with
+  (match args with
   | name :: args ->
     (match get_goal name with
-    | Some fn -> fn args
+    | Some fn ->
+      exit (if guard fn args then 0 else 1)
     | None ->
       eprintf "error: no goal called '%s' was found.\n" name;
       eprintf "Use %s -l to list all published goals in this script.\n" name;