diff --git a/build.sbt b/build.sbt index cbbd89382..753c18884 100644 --- a/build.sbt +++ b/build.sbt @@ -717,6 +717,7 @@ lazy val mainProj = (project in file("main")) mimaSettings, mimaBinaryIssueFilters ++= Vector( exclude[DirectMissingMethodProblem]("sbt.internal.ConsoleProject.*"), + exclude[DirectMissingMethodProblem]("sbt.coursierint.LMCoursier.coursierConfiguration"), ), ) .dependsOn(lmCore, lmIvy, lmCoursierShadedPublishing) diff --git a/lm-coursier/definitions/src/main/scala/lmcoursier/CoursierConfiguration.scala b/lm-coursier/definitions/src/main/scala/lmcoursier/CoursierConfiguration.scala index 0d2173a20..7cd8af77b 100644 --- a/lm-coursier/definitions/src/main/scala/lmcoursier/CoursierConfiguration.scala +++ b/lm-coursier/definitions/src/main/scala/lmcoursier/CoursierConfiguration.scala @@ -69,4 +69,6 @@ import scala.concurrent.duration.{ Duration, FiniteDuration } protocolHandlerDependencies: Seq[ModuleID] = Vector.empty, retry: Option[(FiniteDuration, Int)] = None, sameVersions: Seq[Set[InclExclRule]] = Nil, + @since + localArtifactsShouldBeCached: Boolean = false, ) diff --git a/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala b/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala index 80a035586..43433f76d 100644 --- a/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala +++ b/lm-coursier/src/main/scala/lmcoursier/CoursierDependencyResolution.scala @@ -240,6 +240,7 @@ class CoursierDependencyResolution( .withChecksums(checksums) .withCredentials(conf.credentials.map(ToCoursier.credentials)) .withFollowHttpToHttpsRedirections(conf.followHttpToHttpsRedirections.getOrElse(true)) + .withLocalArtifactsShouldBeCached(conf.localArtifactsShouldBeCached) val excludeDependencies = conf.excludeDependencies.map { (strOrg, strName) => (coursier.Organization(strOrg), coursier.ModuleName(strName)) diff --git a/lm-coursier/src/main/scala/lmcoursier/syntax/package.scala b/lm-coursier/src/main/scala/lmcoursier/syntax/package.scala index b77df4268..922a3d9ea 100644 --- a/lm-coursier/src/main/scala/lmcoursier/syntax/package.scala +++ b/lm-coursier/src/main/scala/lmcoursier/syntax/package.scala @@ -77,6 +77,7 @@ package object syntax { protocolHandlerDependencies = Vector.empty, retry = None, sameVersions = Nil, + localArtifactsShouldBeCached = false, ) } diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 1ec5c34b1..5e3809fee 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -287,6 +287,7 @@ object Defaults extends BuildCommon { csrMavenProfiles :== Set.empty, csrReconciliations :== LMCoursier.relaxedForAllModules, csrMavenDependencyOverride :== false, + csrLocalArtifactsShouldBeCached :== false, csrCacheDirectory := LMCoursier.defaultCacheLocation, csrSameVersions :== Nil, stagingDirectory := (ThisBuild / baseDirectory).value / "target" / "sona-staging", diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 6582cf51e..395d4890e 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -494,6 +494,8 @@ object Keys { val csrReconciliations = settingKey[Seq[(ModuleMatchers, Reconciliation)]]("Strategy to reconcile version conflicts.") val csrSameVersions = settingKey[Seq[Set[InclExclRule]]]("Modules to keep at the same version.") val csrMavenDependencyOverride = settingKey[Boolean]("Enables Maven dependency override (bill of materials) support") + val csrLocalArtifactsShouldBeCached = + settingKey[Boolean]("When true, local file:// artifacts are copied to the cache directory.") val internalConfigurationMap = settingKey[Configuration => Configuration]("Maps configurations to the actual configuration used to define the classpath.").withRank(CSetting) val classpathConfiguration = taskKey[Configuration]("The configuration used to define the classpath.").withRank(CTask) diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index b10cb8a90..adef537fb 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -92,6 +92,7 @@ object LMCoursier { updateConfig: Option[UpdateConfiguration], sameVersions: Seq[Set[InclExclRule]], enableDependencyOverrides: Option[Boolean], + localArtifactsShouldBeCached: Boolean, log: Logger ): CoursierConfiguration = { val coursierExcludeDeps = Inputs @@ -143,7 +144,7 @@ object LMCoursier { .withForceVersions(userForceVersions.toVector) .withMissingOk(missingOk) .withSameVersions(sameVersions) - // .withEnableDependencyOverrides(enableDependencyOverrides) + .withLocalArtifactsShouldBeCached(localArtifactsShouldBeCached) } def coursierConfigurationTask: Def.Initialize[Task[CoursierConfiguration]] = Def.task { @@ -171,6 +172,7 @@ object LMCoursier { Some(updateConfiguration.value), csrSameVersions.value, Some(csrMavenDependencyOverride.value), + csrLocalArtifactsShouldBeCached.value, streams.value.log ) } @@ -207,6 +209,7 @@ object LMCoursier { Some(updateConfiguration.value), csrSameVersions.value, Some(csrMavenDependencyOverride.value), + csrLocalArtifactsShouldBeCached.value, streams.value.log ) } @@ -236,6 +239,7 @@ object LMCoursier { Some(updateConfiguration.value), csrSameVersions.value, Some(csrMavenDependencyOverride.value), + csrLocalArtifactsShouldBeCached.value, streams.value.log ) } diff --git a/sbt-app/src/sbt-test/dependency-management/local-artifacts-cache/build.sbt b/sbt-app/src/sbt-test/dependency-management/local-artifacts-cache/build.sbt new file mode 100644 index 000000000..dfda5d289 --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/local-artifacts-cache/build.sbt @@ -0,0 +1,7 @@ +ThisBuild / scalaVersion := "2.13.16" + +lazy val root = (project in file(".")) + .settings( + name := "local-artifacts-cache-test", + csrLocalArtifactsShouldBeCached := true, + ) diff --git a/sbt-app/src/sbt-test/dependency-management/local-artifacts-cache/test b/sbt-app/src/sbt-test/dependency-management/local-artifacts-cache/test new file mode 100644 index 000000000..e42e6722c --- /dev/null +++ b/sbt-app/src/sbt-test/dependency-management/local-artifacts-cache/test @@ -0,0 +1 @@ +> show csrLocalArtifactsShouldBeCached