diff options
author | Francis De Brabandere <francisdb@gmail.com> | 2018-03-08 04:40:09 +0100 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-03-07 19:40:09 -0800 |
commit | fe0db4eceb3b057092c9bd8dffeb0ce2a31985d2 (patch) | |
tree | b940f27d8fab6474fd5b458aab842bb8abb26394 /scalalib/src | |
parent | 5ae886d7046a9f89382cbb2ab5644ca246b62ca5 (diff) | |
download | mill-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
Diffstat (limited to 'scalalib/src')
-rw-r--r-- | scalalib/src/mill/scalalib/Lib.scala | 41 |
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]( |