210 nodes |
210 nodes |
211 |> update_node name (edit_node edits) |
211 |> update_node name (edit_node edits) |
212 |> touch_node name |
212 |> touch_node name |
213 | Header header => |
213 | Header header => |
214 let |
214 let |
215 val parents = (case header of Exn.Res (_, parents, _) => parents | _ => []); |
215 val imports = (case header of Exn.Res (_, imports, _) => imports | _ => []); |
216 val nodes1 = nodes |
216 val nodes1 = nodes |
217 |> default_node name |
217 |> default_node name |
218 |> fold default_node parents; |
218 |> fold default_node imports; |
219 val nodes2 = nodes1 |
219 val nodes2 = nodes1 |
220 |> Graph.Keys.fold |
220 |> Graph.Keys.fold |
221 (fn dep => Graph.del_edge (dep, name)) (Graph.imm_preds nodes1 name); |
221 (fn dep => Graph.del_edge (dep, name)) (Graph.imm_preds nodes1 name); |
222 val (header', nodes3) = |
222 val (header', nodes3) = |
223 (header, Graph.add_deps_acyclic (name, parents) nodes2) |
223 (header, Graph.add_deps_acyclic (name, imports) nodes2) |
224 handle Graph.CYCLES cs => (Exn.Exn (ERROR (cat_lines (map cycle_msg cs))), nodes2); |
224 handle Graph.CYCLES cs => (Exn.Exn (ERROR (cat_lines (map cycle_msg cs))), nodes2); |
225 in Graph.map_node name (set_header header') nodes3 end |
225 in Graph.map_node name (set_header header') nodes3 end |
226 |> touch_node name |
226 |> touch_node name |
227 | Perspective perspective => |
227 | Perspective perspective => |
228 update_node name (set_perspective perspective) nodes); |
228 update_node name (set_perspective perspective) nodes); |