From 21533863da09012264c6326fd8a583de03013740 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Wed, 13 Nov 2019 17:38:38 +0200 Subject: [PATCH 1/6] Don't emit timestamps when packaging to jar This makes the build more deterministic. --- main-actions/src/main/scala/sbt/Package.scala | 28 ++++++++++++++++--- main/src/main/scala/sbt/Defaults.scala | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/main-actions/src/main/scala/sbt/Package.scala b/main-actions/src/main/scala/sbt/Package.scala index e5ba47012..168e7f9de 100644 --- a/main-actions/src/main/scala/sbt/Package.scala +++ b/main-actions/src/main/scala/sbt/Package.scala @@ -70,13 +70,23 @@ object Package { val options: Seq[PackageOption] ) + @deprecated("Please specify whether to use a static timestamp", "1.3.4") + def apply(conf: Configuration, cacheStoreFactory: CacheStoreFactory, log: Logger): Unit = + apply(conf, cacheStoreFactory, log, None) + /** * * @param conf the package configuration that should be build * @param cacheStoreFactory used for jar caching. We try to avoid rebuilds as much as possible * @param log feedback for the user + * @param time static timestamp to use for all entries, if any. */ - def apply(conf: Configuration, cacheStoreFactory: CacheStoreFactory, log: Logger): Unit = { + def apply( + conf: Configuration, + cacheStoreFactory: CacheStoreFactory, + log: Logger, + time: Option[Long] + ): Unit = { val manifest = new Manifest val main = manifest.getMainAttributes for (option <- conf.options) { @@ -96,7 +106,7 @@ object Package { val sources :+: _ :+: manifest :+: HNil = inputs outputChanged(cacheStoreFactory make "output") { (outChanged, jar: PlainFileInfo) => if (inChanged || outChanged) { - makeJar(sources, jar.file, manifest, log) + makeJar(sources, jar.file, manifest, log, time) jar.file () } else @@ -153,7 +163,17 @@ object Package { homepage map (h => (IMPLEMENTATION_URL, h.toString)) }: _*) } - def makeJar(sources: Seq[(File, String)], jar: File, manifest: Manifest, log: Logger): Unit = { + @deprecated("Please specify whether to use a static timestamp", "1.3.4") + def makeJar(sources: Seq[(File, String)], jar: File, manifest: Manifest, log: Logger): Unit = + makeJar(sources, jar, manifest, log, None) + + def makeJar( + sources: Seq[(File, String)], + jar: File, + manifest: Manifest, + log: Logger, + time: Option[Long] + ): Unit = { val path = jar.getAbsolutePath log.debug("Packaging " + path + " ...") if (jar.exists) @@ -162,7 +182,7 @@ object Package { else sys.error(path + " exists, but is not a regular file") log.debug(sourcesDebugString(sources)) - IO.jar(sources, jar, manifest) + IO.jar(sources, jar, manifest, time) log.debug("Done packaging.") } def sourcesDebugString(sources: Seq[(File, String)]): String = diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 3cfbcd75c..7e6ac251b 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1409,7 +1409,7 @@ object Defaults extends BuildCommon { Def.task { val config = packageConfiguration.value val s = streams.value - Package(config, s.cacheStoreFactory, s.log) + Package(config, s.cacheStoreFactory, s.log, Some(0)) config.jar } From 52b72a7e1474e5c4fc7b45518eecf24d1f5204c8 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Fri, 15 Nov 2019 08:46:00 +0200 Subject: [PATCH 2/6] Target 1.4.0 --- main-actions/src/main/scala/sbt/Package.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main-actions/src/main/scala/sbt/Package.scala b/main-actions/src/main/scala/sbt/Package.scala index 168e7f9de..170de0d03 100644 --- a/main-actions/src/main/scala/sbt/Package.scala +++ b/main-actions/src/main/scala/sbt/Package.scala @@ -70,7 +70,7 @@ object Package { val options: Seq[PackageOption] ) - @deprecated("Please specify whether to use a static timestamp", "1.3.4") + @deprecated("Please specify whether to use a static timestamp", "1.4.0") def apply(conf: Configuration, cacheStoreFactory: CacheStoreFactory, log: Logger): Unit = apply(conf, cacheStoreFactory, log, None) From ceb28a0a4172efc6b6856f15056c8af16f0d0009 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Fri, 15 Nov 2019 08:47:11 +0200 Subject: [PATCH 3/6] Target 1.4.0 --- main-actions/src/main/scala/sbt/Package.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main-actions/src/main/scala/sbt/Package.scala b/main-actions/src/main/scala/sbt/Package.scala index 170de0d03..2adb6dd87 100644 --- a/main-actions/src/main/scala/sbt/Package.scala +++ b/main-actions/src/main/scala/sbt/Package.scala @@ -163,7 +163,7 @@ object Package { homepage map (h => (IMPLEMENTATION_URL, h.toString)) }: _*) } - @deprecated("Please specify whether to use a static timestamp", "1.3.4") + @deprecated("Please specify whether to use a static timestamp", "1.4.0") def makeJar(sources: Seq[(File, String)], jar: File, manifest: Manifest, log: Logger): Unit = makeJar(sources, jar, manifest, log, None) From 4353098454a156b1fb27786a8963098bac44c2e7 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sat, 23 Nov 2019 10:11:03 +0100 Subject: [PATCH 4/6] Target develop branch of io, support SOURCE_DATE_EPOCH --- main/src/main/scala/sbt/Defaults.scala | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 7e6ac251b..5ff9930d5 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1409,7 +1409,12 @@ object Defaults extends BuildCommon { Def.task { val config = packageConfiguration.value val s = streams.value - Package(config, s.cacheStoreFactory, s.log, Some(0)) + Package( + config, + s.cacheStoreFactory, + s.log, + sys.env.get("SOURCE_DATE_EPOCH").map(_.toLong).orElse(Some(0L)) + ) config.jar } From 1d0a41520071c2fcf694d6b68e4b5e7721f7c321 Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Sat, 23 Nov 2019 10:48:19 +0100 Subject: [PATCH 5/6] SOURCE_DATE_EPOCH is in seconds, let's pass milliseconds --- main/src/main/scala/sbt/Defaults.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 5ff9930d5..e1fae5cd1 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1413,7 +1413,7 @@ object Defaults extends BuildCommon { config, s.cacheStoreFactory, s.log, - sys.env.get("SOURCE_DATE_EPOCH").map(_.toLong).orElse(Some(0L)) + sys.env.get("SOURCE_DATE_EPOCH").map(_.toLong * 1000).orElse(Some(0L)) ) config.jar } From 989a37a77679ef08cb394b93f7152fb2743daa6c Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Tue, 24 Dec 2019 10:10:38 +0100 Subject: [PATCH 6/6] Update sbt.io to 1.4.0-M2 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 86c6099ea..b7e235be8 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -11,7 +11,7 @@ object Dependencies { def nightlyVersion: Option[String] = sys.props.get("sbt.build.version") // sbt modules - private val ioVersion = nightlyVersion.getOrElse("1.3.1") + private val ioVersion = nightlyVersion.getOrElse("1.4.0-M2") private val lmVersion = sys.props.get("sbt.build.lm.version") match { case Some(version) => version