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(", ") |