From b643112c2a3ca79527fe20013c96a6687b1a9148 Mon Sep 17 00:00:00 2001 From: Stephane Landelle Date: Tue, 31 Mar 2020 15:35:50 +0200 Subject: [PATCH] Merge transitive and direct reverse dependencies, close sbt/stb#5484 (#209) Motivation: Direct reverse dependencies Map is added into the transitive reverse dependencies Map, so any dependency existing in both Maps loses transitive callers. This behavior is not consistent with the ivy based lm and is not desirable: the goal is to have the complete callers tree. Modification: Merge the 2 maps instead of adding and lose values for conflicting keys. Result: Transitive callers are not lost when dependency is also pulled directly. --- .../lmcoursier/internal/SbtUpdateReport.scala | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala b/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala index 7281c4732..663a6cf5d 100644 --- a/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala +++ b/modules/lm-coursier/src/main/scala/lmcoursier/internal/SbtUpdateReport.scala @@ -213,15 +213,21 @@ private[internal] object SbtUpdateReport { ) .toMap - val reverseDependencies = res.reverseDependencies - .toVector - .map { case (k, v) => - clean(k) -> v.map(clean) - } - .groupBy(_._1) - .mapValues(_.flatMap(_._2)) - .toVector - .toMap ++ directReverseDependencies + val reverseDependencies = { + val transitiveReverseDependencies = res.reverseDependencies + .toVector + .map { case (k, v) => + clean(k) -> v.map(clean) + } + .groupBy(_._1) + .mapValues(_.flatMap(_._2)) + + (transitiveReverseDependencies.toVector ++ directReverseDependencies.toVector) + .groupBy(_._1) + .mapValues(_.flatMap(_._2).toVector) + .toVector + .toMap + } groupedDepArtifacts.toVector.map { case (dep, artifacts) =>