equal
deleted
inserted
replaced
140 |
140 |
141 def purge_theories( |
141 def purge_theories( |
142 theories: List[String], |
142 theories: List[String], |
143 qualifier: String = Sessions.DRAFT, |
143 qualifier: String = Sessions.DRAFT, |
144 master_dir: String = "", |
144 master_dir: String = "", |
145 all: Boolean = false): List[Document.Node.Name] = |
145 all: Boolean = false): (List[Document.Node.Name], List[Document.Node.Name]) = |
146 resources.purge_theories(session, theories = theories, qualifier = qualifier, |
146 resources.purge_theories(session, theories = theories, qualifier = qualifier, |
147 master_dir = master_dir, all = all) |
147 master_dir = master_dir, all = all) |
148 } |
148 } |
149 |
149 |
150 |
150 |
292 |
292 |
293 def purge_theories(session: Session, |
293 def purge_theories(session: Session, |
294 theories: List[String], |
294 theories: List[String], |
295 qualifier: String = Sessions.DRAFT, |
295 qualifier: String = Sessions.DRAFT, |
296 master_dir: String = "", |
296 master_dir: String = "", |
297 all: Boolean = false): List[Document.Node.Name] = |
297 all: Boolean = false): (List[Document.Node.Name], List[Document.Node.Name]) = |
298 { |
298 { |
299 val nodes = theories.map(import_name(qualifier, master_dir, _)) |
299 val nodes = theories.map(import_name(qualifier, master_dir, _)) |
300 |
300 |
301 state.change_result(st => |
301 state.change_result(st => |
302 { |
302 { |
304 val all_nodes = graph.topological_order |
304 val all_nodes = graph.topological_order |
305 |
305 |
306 val purge = |
306 val purge = |
307 (if (all) all_nodes else nodes.filter(graph.defined(_))). |
307 (if (all) all_nodes else nodes.filter(graph.defined(_))). |
308 filterNot(st.is_required(_)).toSet |
308 filterNot(st.is_required(_)).toSet |
309 val purged = all_nodes.filterNot(graph.all_preds(all_nodes.filterNot(purge)).toSet) |
309 |
|
310 val retain = graph.all_preds(all_nodes.filterNot(purge)).toSet |
|
311 val (retained, purged) = all_nodes.partition(retain) |
310 |
312 |
311 val purge_edits = purged.flatMap(name => st.theories(name).purge_edits) |
313 val purge_edits = purged.flatMap(name => st.theories(name).purge_edits) |
312 session.update(Document.Blobs.empty, purge_edits) |
314 session.update(Document.Blobs.empty, purge_edits) |
313 |
315 |
314 (purged, st.remove_theories(purged)) |
316 ((purged, retained), st.remove_theories(purged)) |
315 }) |
317 }) |
316 } |
318 } |
317 } |
319 } |