Allow get_dependencies to check dependencies of multiple variables.
authorRichard W.M. Jones <rjones@redhat.com>
Sat, 10 Mar 2012 12:08:07 +0000 (12:08 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 10 Mar 2012 12:08:07 +0000 (12:08 +0000)
daemon/daemon.ml
lib/whenstate.ml
lib/whenstate.mli

index 6e6a5fd..ed5e067 100644 (file)
@@ -107,7 +107,7 @@ and proc_set_variable (name, value) =
     state := Whenstate.set_variable !state name value;
 
     (* Which jobs need to be re-evaluated? *)
     state := Whenstate.set_variable !state name value;
 
     (* Which jobs need to be re-evaluated? *)
-    let jobs = Whenstate.get_dependencies !state name in
+    let jobs = Whenstate.get_dependencies !state [name] in
     reevaluate_whenjobs jobs;
 
     `ok
     reevaluate_whenjobs jobs;
 
     `ok
index e3aad07..2bb030d 100644 (file)
@@ -123,8 +123,21 @@ let get_variable_names t =
 
 let nr_jobs t = List.length t.jobs
 
 
 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
   List.map (fun jn ->
     try
       let j = StringMap.find jn t.jobmap in
index 15df0c1..d9df5a9 100644 (file)
@@ -73,8 +73,8 @@ val get_variable_names : t -> string list
 val nr_jobs : t -> int
 (** Returns the number of jobs in the state. *)
 
 val nr_jobs : t -> int
 (** Returns the number of jobs in the state. *)
 
-val get_dependencies : t -> string -> Whenexpr.job list
-(** Return the jobs which depend on the named variable. *)
+val get_dependencies : t -> string list -> Whenexpr.job list
+(** Return the jobs which depend on the named variables. *)
 
 val get_whenjobs : t -> Whenexpr.job list
 val get_everyjobs : t -> Whenexpr.job list
 
 val get_whenjobs : t -> Whenexpr.job list
 val get_everyjobs : t -> Whenexpr.job list