Tinder / bazel-diff

Performs Bazel Target Diffing between two revisions in Git, allowing for Test Target Selection and Selective Building
Other
397 stars 59 forks source link

Blocked by transitive dep causing `CircularDependencyException`, while Bazel builds fine #147

Closed arie-stripe closed 2 years ago

arie-stripe commented 2 years ago

Transitive dependency causing circular dependency error in 4.0.8

//external:lib is not a target that we define in our repo. It's a transitive dependency from GRPC: https://github.com/grpc/grpc/blob/master/bazel/grpc_deps.bzl#L183-L186

[Error] Unexpected error during generation of hashes
com.bazel_diff.hash.RuleHasher$CircularDependencyException: Circular dependency detected:
//external:libuv -> //external:libuv
    at com.bazel_diff.hash.RuleHasher.raiseCircularDependency(RuleHasher.kt:23)
    at com.bazel_diff.hash.RuleHasher.digest(RuleHasher.kt:36)
    at com.bazel_diff.hash.RuleHasher$digest$finalHashValue$1.invoke(RuleHasher.kt:54)
    at com.bazel_diff.hash.RuleHasher$digest$finalHashValue$1.invoke(RuleHasher.kt:41)
    at com.bazel_diff.hash.HashingExtensionsKt.sha256(HashingExtensions.kt:14)
    at com.bazel_diff.hash.RuleHasher.digest(RuleHasher.kt:41)
    at com.bazel_diff.hash.TargetHasher.digest(TargetHasher.kt:38)
    at com.bazel_diff.hash.BuildGraphHasher.hashAllTargets$lambda-6(BuildGraphHasher.kt:107)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
    at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
    at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
    at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

It says in this PR (https://github.com/Tinder/bazel-diff/pull/138) that dependencies depending on themselves would keep Bazel from building, but that's not necessarily the case as this does not interfere with Bazel building.

I don't have the full context on this but if the only reason this exception is being raised is because we're assuming that Bazel wouldn't build, then I think we should change it to a warning message.