src/Pure/ML/ml_heap.scala
changeset 79698 b676998d7f97
parent 79697 2e1f75c870e3
child 79706 4f218e6e9d23
--- a/src/Pure/ML/ml_heap.scala	Thu Feb 22 13:27:15 2024 +0100
+++ b/src/Pure/ML/ml_heap.scala	Thu Feb 22 13:57:13 2024 +0100
@@ -241,60 +241,58 @@
   }
 
   def restore(
-    database: Option[SQL.Database],
+    db: SQL.Database,
     sessions: List[Store.Session],
     cache: Compress.Cache = Compress.Cache.none,
     progress: Progress = new Progress
   ): Unit = {
-    database match {
-      case Some(db) if sessions.exists(_.defined) =>
-        private_data.transaction_lock(db, create = true, label = "ML_Heap.restore") {
-          /* heap */
+    if (sessions.exists(_.defined)) {
+      private_data.transaction_lock(db, create = true, label = "ML_Heap.restore") {
+        /* heap */
 
-          val defined_heaps =
-            for (session <- sessions; heap <- session.heap)
-              yield session.name -> heap
-
-          val db_digests = private_data.read_digests(db, defined_heaps.map(_._1))
+        val defined_heaps =
+          for (session <- sessions; heap <- session.heap)
+            yield session.name -> heap
 
-          for ((session_name, heap) <- defined_heaps) {
-            val file_digest = read_file_digest(heap)
-            val db_digest = db_digests.get(session_name)
-            if (db_digest.isDefined && db_digest != file_digest) {
-              progress.echo("Restoring " + session_name + " ...")
+        val db_digests = private_data.read_digests(db, defined_heaps.map(_._1))
 
-              val base_dir = Isabelle_System.make_directory(heap.expand.dir)
-              Isabelle_System.with_tmp_file(session_name + "_", base_dir = base_dir.file) { tmp =>
-                Bytes.write(tmp, Bytes.empty)
-                for (slice <- private_data.read_slices(db, session_name)) {
-                  Bytes.append(tmp, slice.uncompress(cache = cache))
-                }
-                val digest = write_file_digest(tmp)
-                if (db_digest.get == digest) {
-                  Isabelle_System.chmod("a+r", tmp)
-                  Isabelle_System.move_file(tmp, heap)
-                }
-                else error("Incoherent content for session heap " + heap)
+        for ((session_name, heap) <- defined_heaps) {
+          val file_digest = read_file_digest(heap)
+          val db_digest = db_digests.get(session_name)
+          if (db_digest.isDefined && db_digest != file_digest) {
+            progress.echo("Restoring " + session_name + " ...")
+
+            val base_dir = Isabelle_System.make_directory(heap.expand.dir)
+            Isabelle_System.with_tmp_file(session_name + "_", base_dir = base_dir.file) { tmp =>
+              Bytes.write(tmp, Bytes.empty)
+              for (slice <- private_data.read_slices(db, session_name)) {
+                Bytes.append(tmp, slice.uncompress(cache = cache))
               }
-            }
-          }
-
-
-          /* log_db */
-
-          for (session <- sessions; path <- session.log_db) {
-            val file_uuid = Store.read_build_uuid(path, session.name)
-            private_data.read_log_db(db, session.name, old_uuid = file_uuid) match {
-              case Some(log_db) if file_uuid.isEmpty =>
-                progress.echo("Restoring " + session.log_db_name + " ...")
-                Isabelle_System.make_directory(path.expand.dir)
-                Bytes.write(path, log_db.content)
-              case Some(_) => error("Incoherent content for session database " + path)
-              case None =>
+              val digest = write_file_digest(tmp)
+              if (db_digest.get == digest) {
+                Isabelle_System.chmod("a+r", tmp)
+                Isabelle_System.move_file(tmp, heap)
+              }
+              else error("Incoherent content for session heap " + heap)
             }
           }
         }
-      case _ =>
+
+
+        /* log_db */
+
+        for (session <- sessions; path <- session.log_db) {
+          val file_uuid = Store.read_build_uuid(path, session.name)
+          private_data.read_log_db(db, session.name, old_uuid = file_uuid) match {
+            case Some(log_db) if file_uuid.isEmpty =>
+              progress.echo("Restoring " + session.log_db_name + " ...")
+              Isabelle_System.make_directory(path.expand.dir)
+              Bytes.write(path, log_db.content)
+            case Some(_) => error("Incoherent content for session database " + path)
+            case None =>
+          }
+        }
+      }
     }
   }
 }