Persist variables to file (~/.whenjobs/variables).
[whenjobs.git] / lib / whenstate.ml
index e3aad07..b5784db 100644 (file)
@@ -123,8 +123,21 @@ let get_variable_names t =
 
 let nr_jobs t = List.length t.jobs
 
-let get_dependencies t name =
-  let jobnames = try StringMap.find name t.dependencies with Not_found -> [] in
+let get_dependencies t names =
+  (* Get all job names that depend on these variables. *)
+  let jobnames =
+    List.map (
+      fun name ->
+        try StringMap.find name t.dependencies with Not_found -> []
+    ) names in
+
+  (* Flatten the list and remove duplicates. *)
+  let set = List.fold_left (
+    fun set jn -> StringSet.add jn set
+  ) StringSet.empty (List.flatten jobnames) in
+  let jobnames = StringSet.elements set in
+
+  (* Convert job names to jobs. *)
   List.map (fun jn ->
     try
       let j = StringMap.find jn t.jobmap in
@@ -147,6 +160,9 @@ let get_everyjobs t =
 let get_job t jobname =
   StringMap.find jobname t.jobmap
 
+let get_job_names t =
+  List.map (function { job_name = name } -> name) t.jobs
+
 let evaluate_whenjob ?(onload = false) t job =
   match job with
   | { job_cond = Every_job _ } -> assert false