Skip to content

Commit 2939a58

Browse files
johnynekOscar Boykin
andauthored
Improve logging for gradle resolver (#378)
Co-authored-by: Oscar Boykin <[email protected]>
1 parent f18ecb2 commit 2939a58

File tree

3 files changed

+52
-35
lines changed

3 files changed

+52
-35
lines changed

src/scala/com/github/johnynek/bazel_deps/GradleLockDependency.scala

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import cats.data.Validated
44
import io.circe.Decoder.Result
55
import io.circe.{Decoder, Error, HCursor, Json, KeyDecoder, Parser}
66
import io.circe.generic.auto
7+
import org.slf4j.LoggerFactory
78

89
import scala.util.{Failure, Success, Try}
910

@@ -14,6 +15,8 @@ case class GradleLockDependency(
1415
)
1516

1617
object GradleLockDependency {
18+
private val logger = LoggerFactory.getLogger("GradleLockDependency")
19+
1720
sealed trait VersionState
1821
case object EqualVersionSpecified extends VersionState
1922
case object LeftVersion extends VersionState
@@ -24,28 +27,26 @@ object GradleLockDependency {
2427
right: Option[String]
2528
): Try[VersionState] = {
2629
(left, right) match {
27-
case (None, None) => Success(EqualVersionSpecified)
28-
case (Some(l), None) => Success(LeftVersion)
29-
case (None, Some(r)) => Success(RightVersion)
30-
case (Some(l), Some(r)) if (l == r) => Success(EqualVersionSpecified)
31-
case (Some(l), Some(r)) => {
32-
println(
33-
s"This should probably not be allowed... but we are going to pick a version conflict ${versionConflictPolicy} if we can for $dependencyName between $l, $r"
34-
)
35-
versionConflictPolicy.resolve(
36-
None,
37-
Set(Version(l), Version(r))
38-
) match {
39-
case Validated.Valid(v) =>
40-
if (v.asString == l) {
41-
Success(LeftVersion)
42-
} else {
43-
Success(RightVersion)
44-
}
45-
case Validated.Invalid(iv) =>
46-
Failure(new Exception(s"Unable ot combine versions, $iv"))
47-
}
48-
}
30+
case (_, _) if (left == right) => Success(EqualVersionSpecified)
31+
case (Some(_), None) => Success(LeftVersion)
32+
case (None, Some(_)) => Success(RightVersion)
33+
case (Some(l), Some(r)) =>
34+
versionConflictPolicy
35+
.resolve(None, Set(Version(l), Version(r))) match {
36+
case Validated.Valid(v) =>
37+
val vstr = v.asString
38+
logger.debug(
39+
s"Using ${versionConflictPolicy} for $dependencyName with versions $l and $r picking $vstr"
40+
)
41+
42+
val ver =
43+
if (vstr == l) LeftVersion
44+
else RightVersion
45+
46+
Success(ver)
47+
case Validated.Invalid(iv) =>
48+
Failure(new Exception(s"For $dependencyName unable to combine versions $l and $r. Error: $iv"))
49+
}
4950
}
5051
}
5152

@@ -68,7 +69,7 @@ object GradleLockDependency {
6869
_ <- if (left.project == right.project) unit
6970
else Failure(
7071
new Exception(
71-
s"Unable to merge due to incompatible project setting, had $left, $right"
72+
s"Unable to merge due to incompatible project setting in $debugName, had $left, $right"
7273
)
7374
)
7475
v <- resolveVersions(versionConflictPolicy, debugName.getOrElse("Unknown"))(left.locked, right.locked)

src/scala/com/github/johnynek/bazel_deps/GradleLockFile.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ object GradleLockFile {
4848
left.testRuntimeClasspath,
4949
right.testRuntimeClasspath
5050
)
51-
} yield {
51+
} yield
5252
GradleLockFile(
5353
annotationProcessor,
5454
compileClasspath,
@@ -57,9 +57,9 @@ object GradleLockFile {
5757
testCompileClasspath,
5858
testRuntimeClasspath
5959
)
60-
}
6160
}
6261
}
62+
6363
def empty = GradleLockFile(None, None, None, None, None, None)
6464

6565
def decodeGradleLockFile(

src/scala/com/github/johnynek/bazel_deps/GradleResolver.scala

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import java.nio.file.{Path, Paths, Files}
77
import scala.collection.immutable.SortedMap
88
import scala.collection.mutable.{Map => MMap}
99
import scala.util.{Failure, Success, Try}
10+
import org.slf4j.LoggerFactory
1011

1112
import cats.implicits._
1213

@@ -17,6 +18,8 @@ class GradleResolver(
1718
getShasFn: List[MavenCoordinate] => Try[SortedMap[MavenCoordinate, ResolvedShasValue]]
1819
) extends CustomResolver {
1920

21+
private val logger = LoggerFactory.getLogger("GradleResolver")
22+
2023
def resolverType: ResolverType.Gradle = gradleTpe
2124

2225
implicit val tryMergeGradleLock: TryMerge[GradleLockDependency] =
@@ -104,8 +107,8 @@ class GradleResolver(
104107

105108
private def cleanUpMap(
106109
// invariant: depMap is fully connected, all nodes in transitive exist as a key
107-
depMap: Map[String, GradleLockDependency]
108-
): Map[String, GradleLockDependency] = {
110+
depMap: SortedMap[String, GradleLockDependency]
111+
): SortedMap[String, GradleLockDependency] = {
109112

110113
// for no content deps there is nothing to fetch/no sha to operate on.
111114
def matchNoContentRes(unversioned: String, v: GradleLockDependency): Boolean =
@@ -116,10 +119,11 @@ private def cleanUpMap(
116119
}
117120

118121
// Remove gradle projects, these are source dependencies
119-
val depMapNonProj = depMap.filter(_._2.project != Some(true))
122+
val depMapNonProj: SortedMap[String, GradleLockDependency] =
123+
depMap.filter(_._2.project != Some(true))
120124

121125
depMapNonProj
122-
.foldLeft(Map.empty[String, GradleLockDependency]) { case (accGraph, (unversioned, thisGLD)) =>
126+
.foldLeft(SortedMap.empty[String, GradleLockDependency]) { case (accGraph, (unversioned, thisGLD)) =>
123127

124128
/*
125129
* this method expands a list of transitive deps removing
@@ -217,13 +221,22 @@ private def cleanUpMap(
217221
val g = Graph.empty[UnversionedCoordinate, Unit]
218222
gradleTpe.ignoreDependencyEdge match {
219223
case Some(missing) =>
224+
logger.info(s"ignoreDependencyEdge has ${missing.size} items")
220225
missing.iterator.flatMap { case (s, d) =>
221226
UnversionedCoordinate.parse(s)
222-
.product(UnversionedCoordinate.parse(d))
223-
.toOption
227+
.product(UnversionedCoordinate.parse(d)) match {
228+
case Validated.Valid((suv, duv)) =>
229+
logger.info(s"ignoring $s -> $d")
230+
Edge(suv, duv, ()) :: Nil
231+
case Validated.Invalid(errs) =>
232+
logger.warn(s"could not parse ignoreDependencyEdge: $s -> $d: $errs")
233+
Nil
234+
}
224235
}
225-
.foldLeft(g) { case (g, (s, d)) => g.addEdge(Edge(s, d, ()))}
226-
case None => g
236+
.foldLeft(g) { (g, e) => g.addEdge(e) }
237+
case None =>
238+
logger.info(s"ignoreDependencyEdge is empty.")
239+
g
227240
}
228241
}
229242

@@ -242,7 +255,7 @@ private def cleanUpMap(
242255
): Try[Graph[MavenCoordinate, Unit]] =
243256
assertConnectedDependencyMap(depMap)
244257
.map(_ => cleanUpMap(depMap))
245-
.flatMap { depMap =>
258+
.flatMap { (depMap: SortedMap[String, GradleLockDependency]) =>
246259
type V[+A] = ValidatedNec[(String, String), A]
247260
val cache = MMap[String, V[MavenCoordinate]]()
248261

@@ -289,7 +302,10 @@ private def cleanUpMap(
289302
// but if we ignore the edge, we defensively make sure we add revDep
290303
// since this graph is validated, it should be added when it appears
291304
// as a key however
292-
if (ignoreEdge(revDep, cnode)) g.addNode(revDep)
305+
if (ignoreEdge(revDep, cnode)) {
306+
logger.debug(s"ignored: $revDep -> $cnode")
307+
g.addNode(revDep)
308+
}
293309
else g.addEdge(Edge(revDep, cnode, ()))
294310
}
295311
}

0 commit comments

Comments
 (0)