src/Pure/Tools/build_process.scala
changeset 77509 3bc49507bae5
parent 77505 7ee426daafa3
child 77511 3d6db917bd1b
--- a/src/Pure/Tools/build_process.scala	Sat Mar 04 21:41:16 2023 +0100
+++ b/src/Pure/Tools/build_process.scala	Sat Mar 04 22:29:21 2023 +0100
@@ -161,7 +161,7 @@
   ) {
     def echo(progress: Progress, message_serial: Long, message: Progress.Message): State =
       if (message_serial > progress_seen) {
-        progress.echo(message)
+        progress.output(message)
         copy(progress_seen = message_serial)
       }
       else {
@@ -255,9 +255,10 @@
       val serial = SQL.Column.long("serial").make_primary_key
       val kind = SQL.Column.int("kind")
       val text = SQL.Column.string("text")
+      val verbose = SQL.Column.bool("verbose")
       val uuid = Generic.uuid
 
-      val table = make_table("progress", List(serial, kind, text, uuid))
+      val table = make_table("progress", List(serial, kind, text, verbose, uuid))
     }
 
     object Sessions {
@@ -332,7 +333,8 @@
             val serial = res.long(Progress.serial)
             val kind = isabelle.Progress.Kind(res.int(Progress.kind))
             val text = res.string(Progress.text)
-            serial -> isabelle.Progress.Message(kind, text)
+            val verbose = res.bool(Progress.verbose)
+            serial -> isabelle.Progress.Message(kind, text, verbose = verbose)
           })
         }
 
@@ -346,7 +348,8 @@
         stmt.long(1) = message_serial
         stmt.int(2) = message.kind.id
         stmt.string(3) = message.text
-        stmt.string(4) = uuid
+        stmt.bool(4) = message.verbose
+        stmt.string(5) = uuid
         stmt.execute()
       }
     }
@@ -631,18 +634,20 @@
   /* progress backed by database */
 
   object progress extends Progress {
-    override def echo(message: Progress.Message): Unit =
-      synchronized_database {
-        val serial1 = _state.serial + 1
-        _state = _state.echo(build_progress, serial1, message).copy(serial = serial1)
+    override def verbose: Boolean = build_progress.verbose
 
+    override def output(message: Progress.Message): Unit =
+      synchronized_database {
+        val state1 = _state.copy(serial = _state.serial + 1)
         for (db <- _database) {
-          Build_Process.Data.write_progress(db, serial1, message, build_context.uuid)
-          Build_Process.Data.set_serial(db, serial1)
+          Build_Process.Data.write_progress(db, state1.serial, message, build_context.uuid)
+          Build_Process.Data.set_serial(db, state1.serial)
         }
+        _state =
+          if (do_output(message)) state1.echo(build_progress, state1.serial, message)
+          else state1
       }
 
-    override def verbose: Boolean = build_progress.verbose
     override def stop(): Unit = build_progress.stop()
     override def stopped: Boolean = build_progress.stopped
   }