From 6e31958e853e95aa027520c358f67a84d9543fed Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Fri, 22 May 2026 01:29:27 -0400 Subject: [PATCH] [2.x] perf: Improve incremental test stamper **Problem** Incremental stamper is still causing perf issue. **Solution** This further avoids SHA-256 calls to calculate the stamp. --- .../main/scala/sbt/internal/IncrementalTest.scala | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/main/src/main/scala/sbt/internal/IncrementalTest.scala b/main/src/main/scala/sbt/internal/IncrementalTest.scala index 3a70b4fda..a7a262f97 100644 --- a/main/src/main/scala/sbt/internal/IncrementalTest.scala +++ b/main/src/main/scala/sbt/internal/IncrementalTest.scala @@ -182,11 +182,18 @@ class ClassStamper( extraHashes: Seq[Digest], log: Logger, ): Option[Digest] = - val digests = SortedSet(analyses.flatMap(internalStamp(javaClassName, _, Set.empty, log))*) - log.debug(s"test: transitiveStamp($javaClassName, $extraHashes) = $digests") - if digests.nonEmpty then Some(Digest.sha256Hash(digests.toSeq ++ extraHashes*)) + val digests = transitiveStamps(javaClassName, extraHashes, log) + if digests.nonEmpty then Some(Digest.sha256Hash(digests*)) else None + private def transitiveStamps( + javaClassName: String, + extraHashes: Seq[Digest], + log: Logger, + ): Seq[Digest] = + val digests = SortedSet(analyses.flatMap(internalStamp(javaClassName, _, Set.empty, log))*) + digests.toSeq ++ extraHashes + private def internalStamp( javaClassName: String, analysis: Analysis, @@ -205,7 +212,7 @@ class ClassStamper( val internalJarDeps = relations .externalDeps(className) .flatMap: libClassName => - transitiveStamp(libClassName, Nil, log) + transitiveStamps(libClassName, Nil, log) val externalDeps = relations .externalDeps(className) .flatMap: libClassName =>