X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=goaljobs.ml;h=fcbcf236ca5d482914c9ef516490b5c68e013deb;hb=3d473620d4474b9c968997e7786006f6ef4ee960;hp=4e3c07bbd29e2053ae2e7cc5304ddbe6292ee947;hpb=389eaef1047e69836f65ce99301d7a2589083581;p=goaljobs.git diff --git a/goaljobs.ml b/goaljobs.ml index 4e3c07b..fcbcf23 100644 --- a/goaljobs.ml +++ b/goaljobs.ml @@ -33,11 +33,31 @@ exception Goal_result of goal_result_t let goal_failed msg = raise (Goal_result (Goal_failed msg)) +let depth = ref 0 +let indent fs = + let do_indent str = + prerr_string "| "; + for i = 0 to !depth-1 do prerr_string " " done; + prerr_string str; + Pervasives.flush Pervasives.stderr + in + ksprintf do_indent fs + let target v = if v then raise (Goal_result Goal_OK) let target_all vs = target (List.fold_left (&&) true vs) let target_exists vs = target (List.fold_left (||) false vs) -let require f = f () +let require name f = + indent "require: %s\n" name; + incr depth; + let r = (try Either (f ()) with exn -> Or exn) in + decr depth; + match r with + | Either x -> x + | Or exn -> raise exn + +let _enter_goal name = indent "enter goal: %s\n" name +let _leave_goal name = indent "leave goal: %s\n" name type period_t = Seconds | Days | Months | Years let seconds = (1, Seconds)