summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis De Brabandere <francisdb@gmail.com>2018-03-08 04:40:09 +0100
committerLi Haoyi <haoyi.sg@gmail.com>2018-03-07 19:40:09 -0800
commitfe0db4eceb3b057092c9bd8dffeb0ce2a31985d2 (patch)
treeb940f27d8fab6474fd5b458aab842bb8abb26394
parent5ae886d7046a9f89382cbb2ab5644ca246b62ca5 (diff)
downloadmill-fe0db4eceb3b057092c9bd8dffeb0ce2a31985d2.tar.gz
mill-fe0db4eceb3b057092c9bd8dffeb0ce2a31985d2.tar.bz2
mill-fe0db4eceb3b057092c9bd8dffeb0ce2a31985d2.zip
fix #185 include "optional" artifacts if they exist (#209)
this brings the mill code in line with ammonite see https://github.com/lihaoyi/Ammonite/pull/713/files
-rw-r--r--scalalib/src/mill/scalalib/Lib.scala41
1 files changed, 29 insertions, 12 deletions
diff --git a/scalalib/src/mill/scalalib/Lib.scala b/scalalib/src/mill/scalalib/Lib.scala
index 420075fe..d8fd9963 100644
--- a/scalalib/src/mill/scalalib/Lib.scala
+++ b/scalalib/src/mill/scalalib/Lib.scala
@@ -1,10 +1,9 @@
package mill
package scalalib
-import java.io.File
-
import ammonite.ops._
-import coursier.{Cache, Fetch, MavenRepository, Repository, Resolution, Dependency, Module => CoursierModule}
+import ammonite.util.Util
+import coursier.{Cache, Dependency, Fetch, Repository, Resolution}
import mill.eval.{PathRef, Result}
import mill.util.Loose.Agg
@@ -90,17 +89,35 @@ object Lib{
val msg = header + errLines + "\n"
Result.Failure(msg)
} else {
+
+ def load(artifacts: Seq[coursier.Artifact]) = {
+ val logger = None
+ val loadedArtifacts = scalaz.concurrent.Task.gatherUnordered(
+ for (a <- artifacts)
+ yield coursier.Cache.file(a, logger = logger).run
+ .map(a.isOptional -> _)
+ ).unsafePerformSync
+
+ val errors = loadedArtifacts.collect {
+ case (false, scalaz.-\/(x)) => x
+ case (true, scalaz.-\/(x)) if !x.notFound => x
+ }
+ val successes = loadedArtifacts.collect { case (_, scalaz.\/-(x)) => x }
+ (errors, successes)
+ }
+
val sourceOrJar =
if (sources) resolution.classifiersArtifacts(Seq("sources"))
- else resolution.artifacts
- val localArtifacts: Seq[File] = scalaz.concurrent.Task
- .gatherUnordered(sourceOrJar.map(Cache.file(_).run))
- .unsafePerformSync
- .flatMap(_.toOption)
-
- Agg.from(
- localArtifacts.map(p => PathRef(Path(p), quick = true)).filter(_.path.ext == "jar")
- )
+ else resolution.artifacts(true)
+ val (errors, successes) = load(sourceOrJar)
+ if(errors.isEmpty){
+ Agg.from(
+ successes.map(p => PathRef(Path(p), quick = true)).filter(_.path.ext == "jar")
+ )
+ }else{
+ val errorDetails = errors.map(e => s"${Util.newLine} ${e.describe}").mkString
+ Result.Failure("Failed to load source dependencies" + errorDetails)
+ }
}
}
def scalaCompilerIvyDeps(scalaVersion: String) = Agg[Dep](