mirror of https://github.com/sbt/sbt.git
make sortModules tailrec
This commit is contained in:
parent
72b8fd1025
commit
593850562a
|
|
@ -407,9 +407,11 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
|
||||||
}: _*)
|
}: _*)
|
||||||
val stackGuard = reports0.size * reports0.size * 2
|
val stackGuard = reports0.size * reports0.size * 2
|
||||||
// sort the all modules such that less called modules comes earlier
|
// sort the all modules such that less called modules comes earlier
|
||||||
def sortModules(cs: ListMap[(String, String), Vector[OrganizationArtifactReport]],
|
@tailrec def sortModules(cs: ListMap[(String, String), Vector[OrganizationArtifactReport]],
|
||||||
|
acc: ListMap[(String, String), Vector[OrganizationArtifactReport]],
|
||||||
n: Int): ListMap[(String, String), Vector[OrganizationArtifactReport]] =
|
n: Int): ListMap[(String, String), Vector[OrganizationArtifactReport]] =
|
||||||
{
|
{
|
||||||
|
println(s"sortModules: $n / $stackGuard")
|
||||||
val keys = cs.keySet
|
val keys = cs.keySet
|
||||||
val (called, notCalled) = cs partition {
|
val (called, notCalled) = cs partition {
|
||||||
case (k, oas) =>
|
case (k, oas) =>
|
||||||
|
|
@ -422,9 +424,8 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
notCalled ++
|
(if (called.isEmpty || n > stackGuard) acc ++ notCalled ++ called
|
||||||
(if (called.isEmpty || n > stackGuard) called
|
else sortModules(called, acc ++ notCalled, n + 1))
|
||||||
else sortModules(called, n + 1))
|
|
||||||
}
|
}
|
||||||
def resolveConflicts(cs: List[((String, String), Vector[OrganizationArtifactReport])]): List[OrganizationArtifactReport] =
|
def resolveConflicts(cs: List[((String, String), Vector[OrganizationArtifactReport])]): List[OrganizationArtifactReport] =
|
||||||
cs match {
|
cs match {
|
||||||
|
|
@ -446,7 +447,7 @@ private[sbt] trait CachedResolutionResolveEngine extends ResolveEngine {
|
||||||
x :: resolveConflicts(next)
|
x :: resolveConflicts(next)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
val sorted = sortModules(allModules, 0)
|
val sorted = sortModules(allModules, ListMap(), 0)
|
||||||
val result = resolveConflicts(sorted.toList)
|
val result = resolveConflicts(sorted.toList)
|
||||||
result.toVector
|
result.toVector
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue