src/Pure/Thy/thy_resources.scala
changeset 68915 634768c0bd22
parent 68914 51bd9e9501fb
child 68916 2a1583baaaa0
equal deleted inserted replaced
68914:51bd9e9501fb 68915:634768c0bd22
   253 
   253 
   254       result.join
   254       result.join
   255     }
   255     }
   256 
   256 
   257     def purge_theories(
   257     def purge_theories(
   258         theories: List[String],
   258       theories: List[String],
   259         qualifier: String = Sessions.DRAFT,
   259       qualifier: String = Sessions.DRAFT,
   260         master_dir: String = "",
   260       master_dir: String = "",
   261         all: Boolean = false): (List[Document.Node.Name], List[Document.Node.Name]) =
   261       all: Boolean = false): (List[Document.Node.Name], List[Document.Node.Name]) =
   262       resources.purge_theories(session, theories = theories, qualifier = qualifier,
   262     {
   263         master_dir = proper_string(master_dir) getOrElse tmp_dir_name, all = all)
   263       val master = proper_string(master_dir) getOrElse tmp_dir_name
       
   264       val nodes = if (all) None else Some(theories.map(resources.import_name(qualifier, master, _)))
       
   265       resources.purge_theories(session, nodes)
       
   266     }
   264   }
   267   }
   265 
   268 
   266 
   269 
   267   /* internal state */
   270   /* internal state */
   268 
   271 
   397         session.update(Document.Blobs.empty, theory_edits.flatMap(_._1))
   400         session.update(Document.Blobs.empty, theory_edits.flatMap(_._1))
   398         st1.update_theories(theory_edits.map(_._2))
   401         st1.update_theories(theory_edits.map(_._2))
   399       })
   402       })
   400   }
   403   }
   401 
   404 
   402   def purge_theories(session: Session,
   405   def purge_theories(session: Session, nodes: Option[List[Document.Node.Name]])
   403     theories: List[String],
   406     : (List[Document.Node.Name], List[Document.Node.Name]) =
   404     qualifier: String,
   407   {
   405     master_dir: String,
       
   406     all: Boolean): (List[Document.Node.Name], List[Document.Node.Name]) =
       
   407   {
       
   408     val nodes = theories.map(import_name(qualifier, master_dir, _))
       
   409 
       
   410     state.change_result(st =>
   408     state.change_result(st =>
   411       {
   409       {
   412         val graph = st.theories_graph
   410         val graph = st.theories_graph
   413         val all_nodes = graph.topological_order
   411         val all_nodes = graph.topological_order
   414 
   412 
   415         val purge =
   413         val purge =
   416           (if (all) all_nodes else nodes.filter(graph.defined(_))).
   414           (if (nodes.isEmpty) all_nodes else nodes.get.filter(graph.defined(_))).
   417             filterNot(st.is_required(_)).toSet
   415             filterNot(st.is_required(_)).toSet
   418 
   416 
   419         val retain = graph.all_preds(all_nodes.filterNot(purge)).toSet
   417         val retain = graph.all_preds(all_nodes.filterNot(purge)).toSet
   420         val (retained, purged) = all_nodes.partition(retain)
   418         val (retained, purged) = all_nodes.partition(retain)
   421 
   419