From 05c248df8229069cedad6fc901a2c5bdc4db2a42 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Wed, 27 Apr 2016 01:12:14 +0200 Subject: [PATCH] Safety check --- .../coursier/core/ResolutionProcess.scala | 61 +++++++++++-------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala b/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala index d88284b20..1df1dd1ac 100644 --- a/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala +++ b/core/shared/src/main/scala/coursier/core/ResolutionProcess.scala @@ -65,35 +65,44 @@ final case class Missing( def next(results: Fetch.MD): ResolutionProcess = { - val errors = results - .collect{case (modVer, -\/(errs)) => modVer -> errs } - val successes = results - .collect{case (modVer, \/-(repoProj)) => modVer -> repoProj } - - val depMgmtMissing0 = successes - .map{case (_, (_, proj)) => current.dependencyManagementMissing(proj) } - .fold(Set.empty)(_ ++ _) - - val depMgmtMissing = depMgmtMissing0 -- results.map(_._1) - - def cont0(res: Resolution) = { - val res0 = - successes.foldLeft(res){case (acc, (modVer, (source, proj))) => - acc.copyWithCache(projectCache = acc.projectCache + ( - modVer -> (source, acc.withDependencyManagement(proj)) - )) - } - - Continue(res0, cont) + val errors = results.collect { + case (modVer, -\/(errs)) => + modVer -> errs + } + val successes = results.collect { + case (modVer, \/-(repoProj)) => + modVer -> repoProj } - val current0 = current - .copyWithCache(errorCache = current.errorCache ++ errors) + def cont0(res: Resolution): ResolutionProcess = { - if (depMgmtMissing.isEmpty) - cont0(current0) - else - Missing(depMgmtMissing.toSeq, current0, cont0) + val depMgmtMissing0 = successes.map { + case (_, (_, proj)) => + res.dependencyManagementMissing(proj) + }.fold(Set.empty)(_ ++ _) + + val depMgmtMissing = depMgmtMissing0 -- results.map(_._1) + + if (depMgmtMissing.isEmpty) { + val res0 = successes.foldLeft(res) { + case (acc, (modVer, (source, proj))) => + acc.copyWithCache( + projectCache = acc.projectCache + ( + modVer -> (source, acc.withDependencyManagement(proj)) + ) + ) + } + + Continue(res0, cont) + } else + Missing(depMgmtMissing.toSeq, res, cont0) + } + + val current0 = current.copyWithCache( + errorCache = current.errorCache ++ errors + ) + + cont0(current0) } }