From ef05e07cc58a1c06ee064e97350ea153c3ada7a1 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 18 Jul 2019 18:28:22 -0400 Subject: [PATCH] Fixes credential strictness Fixes #4882 In #4855 I inadvertently introduced `credential` strictness. This makes relaxes it again by ignoring if the credential file doesn't exist. --- .../scala/sbt/coursierint/LMCoursier.scala | 24 +++++++++++++------ .../credentials/build.sbt | 6 +++++ .../dependency-management/credentials/test | 1 + 3 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 sbt/src/sbt-test/dependency-management/credentials/build.sbt create mode 100644 sbt/src/sbt-test/dependency-management/credentials/test diff --git a/main/src/main/scala/sbt/coursierint/LMCoursier.scala b/main/src/main/scala/sbt/coursierint/LMCoursier.scala index 0542617c4..a544d8f87 100644 --- a/main/src/main/scala/sbt/coursierint/LMCoursier.scala +++ b/main/src/main/scala/sbt/coursierint/LMCoursier.scala @@ -20,7 +20,11 @@ import lmcoursier._ import lmcoursier.credentials.Credentials import Keys._ import sbt.librarymanagement._ -import sbt.librarymanagement.ivy.{ Credentials => IvyCredentials } +import sbt.librarymanagement.ivy.{ + Credentials => IvyCredentials, + DirectCredentials, + FileCredentials +} import sbt.util.Logger import sbt.io.syntax._ import xsbti.AppConfiguration @@ -195,14 +199,20 @@ object LMCoursier { csrPublications := CoursierArtifactsTasks.coursierPublicationsTask(packageConfigs: _*).value } - private[sbt] def registerCredentials(creds: IvyCredentials): Unit = { - val d = IvyCredentials.toDirect(creds) - credentialRegistry.put((d.host, d.realm), d) - () - } - // This emulates Ivy's credential registration which basically keeps mutating global registry def allCredentialsTask: Def.Initialize[Task[Seq[IvyCredentials]]] = Def.task { + val st = streams.value + def registerCredentials(creds: IvyCredentials): Unit = { + (creds match { + case dc: DirectCredentials => Right[String, DirectCredentials](dc) + case fc: FileCredentials => IvyCredentials.loadCredentials(fc.path) + }) match { + case Left(err) => st.log.warn(err) + case Right(d) => + credentialRegistry.put((d.host, d.realm), d) + () + } + } import scala.collection.JavaConverters._ (Keys.credentials in ThisBuild).value foreach registerCredentials (Keys.credentials in LocalRootProject).value foreach registerCredentials diff --git a/sbt/src/sbt-test/dependency-management/credentials/build.sbt b/sbt/src/sbt-test/dependency-management/credentials/build.sbt new file mode 100644 index 000000000..5ba36e191 --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/credentials/build.sbt @@ -0,0 +1,6 @@ +ThisBuild / scalaVersion := "2.13.0" +ivyPaths := IvyPaths(baseDirectory.value, Some(target.value / "ivy-cache")) + +// don't blow up when credential file doesn't exist +// https://github.com/sbt/sbt/issues/4882 +credentials += Credentials(baseDirectory.value / "nonexistent") diff --git a/sbt/src/sbt-test/dependency-management/credentials/test b/sbt/src/sbt-test/dependency-management/credentials/test new file mode 100644 index 000000000..103bd8d2f --- /dev/null +++ b/sbt/src/sbt-test/dependency-management/credentials/test @@ -0,0 +1 @@ +> update