src/Pure/Thy/thy_resources.scala
changeset 67943 b45f0c0ea14f
parent 67940 b4e80f062fbf
child 67945 984c3dc46cc0
equal deleted inserted replaced
67942:a3e5f08e6b58 67943:b45f0c0ea14f
   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 }