src/Pure/Thy/sessions.scala
changeset 75782 dba571dd0ba9
parent 75779 5470c67bd772
child 75786 ff6c1a82270f
equal deleted inserted replaced
75781:0e5339342998 75782:dba571dd0ba9
  1219       database_server match {
  1219       database_server match {
  1220         case Some(db) => f(db)
  1220         case Some(db) => f(db)
  1221         case None => using(store.open_database(session, output = true))(f)
  1221         case None => using(store.open_database(session, output = true))(f)
  1222       }
  1222       }
  1223 
  1223 
  1224     def database[A](session: String)(f: SQL.Database => Option[A]): Option[A] =
       
  1225       database_server match {
       
  1226         case Some(db) => f(db)
       
  1227         case None =>
       
  1228           store.try_open_database(session) match {
       
  1229             case Some(db) => using(db)(f)
       
  1230             case None => None
       
  1231           }
       
  1232       }
       
  1233 
       
  1234     def read_export(
       
  1235       session_hierarchy: List[String], theory: String, name: String
       
  1236     ): Option[Export.Entry] = {
       
  1237       def read(db: SQL.Database, session: String): Option[Export.Entry] =
       
  1238         Export.Entry_Name(session = session, theory = theory, name = name).read(db, store.cache)
       
  1239       val attempts =
       
  1240         database_server match {
       
  1241           case Some(db) => session_hierarchy.view.map(read(db, _))
       
  1242           case None =>
       
  1243             session_hierarchy.view.map(session =>
       
  1244               store.try_open_database(session) match {
       
  1245                 case Some(db) => using(db) { _ => read(db, session) }
       
  1246                 case None => None
       
  1247               })
       
  1248         }
       
  1249       attempts.collectFirst({ case Some(entry) => entry })
       
  1250     }
       
  1251 
       
  1252     def get_export(session_hierarchy: List[String], theory: String, name: String): Export.Entry =
       
  1253       read_export(session_hierarchy, theory, name) getOrElse
       
  1254         Export.empty_entry(theory, name)
       
  1255 
       
  1256     def get_classpath(structure: Structure, session: String): List[File.Content_Bytes] =
       
  1257     {
       
  1258       (for {
       
  1259         name <- structure.build_requirements(List(session))
       
  1260         patterns = structure(name).export_classpath if patterns.nonEmpty
       
  1261       } yield {
       
  1262         database(name) { db =>
       
  1263           val matcher = Export.make_matcher(patterns)
       
  1264           val res =
       
  1265             for {
       
  1266               entry_name <- Export.read_entry_names(db, name) if matcher(entry_name)
       
  1267               entry <- entry_name.read(db, store.cache)
       
  1268             } yield File.Content(entry.entry_name.make_path(), entry.uncompressed)
       
  1269           Some(res)
       
  1270         }.getOrElse(Nil)
       
  1271       }).flatten
       
  1272     }
       
  1273 
       
  1274     override def toString: String = {
  1224     override def toString: String = {
  1275       val s =
  1225       val s =
  1276         database_server match {
  1226         database_server match {
  1277           case Some(db) => db.toString
  1227           case Some(db) => db.toString
  1278           case None => "input_dirs = " + store.input_dirs.map(_.absolute).mkString(", ")
  1228           case None => "input_dirs = " + store.input_dirs.map(_.absolute).mkString(", ")