# HG changeset patch # User wenzelm # Date 1672688361 -3600 # Node ID 713eb7f2230ef46127834fd8a114a96ea36244f5 # Parent 8b98cffb1a999e447ef8bc2b21a425565b336623 clarified signature: more explicit types; diff -r 8b98cffb1a99 -r 713eb7f2230e src/Pure/Thy/sessions.scala --- a/src/Pure/Thy/sessions.scala Mon Jan 02 20:24:43 2023 +0100 +++ b/src/Pure/Thy/sessions.scala Mon Jan 02 20:39:21 2023 +0100 @@ -84,28 +84,31 @@ "WHERE " + Sources.session_name.equal(session_name) + (if (name == "") "" else " AND " + Sources.name.equal(name)) - - type T = Map[String, Source_File] - - def read_files(session_base: Base, cache: Compress.Cache = Compress.Cache.none): T = { - def err(path: Path): Nothing = error("Incoherent digest for source file: " + path) + def load(session_base: Base, cache: Compress.Cache = Compress.Cache.none): Sources = + new Sources( + session_base.session_sources.foldLeft(Map.empty) { + case (sources, (path, digest)) => + def err(): Nothing = error("Incoherent digest for source file: " + path) + val name = path.implode_symbolic + sources.get(name) match { + case Some(source_file) => + if (source_file.digest == digest) sources else err() + case None => + val bytes = Bytes.read(path) + if (bytes.sha1_digest == digest) { + val (compressed, body) = + bytes.maybe_compress(Compress.Options_Zstd(), cache = cache) + val file = Source_File(name, digest, compressed, body, cache) + sources + (name -> file) + } + else err() + } + }) + } - session_base.session_sources.foldLeft(Map.empty[String, Source_File]) { - case (sources, (path, digest)) => - val name = path.implode_symbolic - sources.get(name) match { - case Some(source_file) => if (source_file.digest == digest) sources else err(path) - case None => - val bytes = Bytes.read(path) - if (bytes.sha1_digest == digest) { - val (compressed, body) = bytes.maybe_compress(Compress.Options_Zstd(), cache = cache) - val file = Source_File(name, digest, compressed, body, cache) - sources + (name -> file) - } - else err(path) - } - } - } + class Sources private(rep: Map[String, Source_File]) extends Iterable[Source_File] { + override def toString: String = rep.values.toList.sortBy(_.name).mkString("Sources(", ", ", ")") + override def iterator: Iterator[Source_File] = rep.valuesIterator } @@ -1581,7 +1584,7 @@ def write_session_info( db: SQL.Database, session_name: String, - sources: Sources.T, + sources: Sources, build_log: Build_Log.Session_Info, build: Build.Session_Info ): Unit = { @@ -1652,14 +1655,14 @@ /* session sources */ - def write_sources(db: SQL.Database, session_name: String, files: Sources.T): Unit = { - for ((name, file) <- files) { + def write_sources(db: SQL.Database, session_name: String, sources: Sources): Unit = { + for (source_file <- sources) { db.using_statement(Sources.table.insert()) { stmt => stmt.string(1) = session_name - stmt.string(2) = name - stmt.string(3) = file.digest.toString - stmt.bool(4) = file.compressed - stmt.bytes(5) = file.body + stmt.string(2) = source_file.name + stmt.string(3) = source_file.digest.toString + stmt.bool(4) = source_file.compressed + stmt.bytes(5) = source_file.body stmt.execute() } } diff -r 8b98cffb1a99 -r 713eb7f2230e src/Pure/Tools/build_job.scala --- a/src/Pure/Tools/build_job.scala Mon Jan 02 20:24:43 2023 +0100 +++ b/src/Pure/Tools/build_job.scala Mon Jan 02 20:39:21 2023 +0100 @@ -246,8 +246,8 @@ val info: Sessions.Info = session_background.sessions_structure(session_name) val options: Options = NUMA.policy_options(info.options, numa_node) - val session_sources: Sessions.Sources.T = - Sessions.Sources.read_files(session_background.base, cache = store.cache.compress) + val session_sources: Sessions.Sources = + Sessions.Sources.load(session_background.base, cache = store.cache.compress) private val future_result: Future[Process_Result] = Future.thread("build", uninterruptible = true) {