Skip to content

Commit 1cb1f1a

Browse files
more updates
1 parent 6bee003 commit 1cb1f1a

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

cli/src/main/kotlin/com/bazel_diff/bazel/BazelClient.kt

+6-2
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,14 @@ class BazelClient(private val useCquery: Boolean, private val fineGrainedHashExt
6868
suspend fun queryModifiedSourcefileTargets(
6969
modifiedFilepaths: Set<Path>
7070
): List<Build.Target> {
71+
logger.i { modifiedFilepaths.map { it.toString() }.joinToString("\n") }
7172
val queryEpoch = Calendar.getInstance().getTimeInMillis()
7273
val allReposToQuery = fineGrainedHashExternalRepos.map { "@$it" }
73-
val fineGrainedHashExternalReposSourceTargets = queryService.query("kind('source file', ${allReposToQuery.joinToString(" + ") { "'$it//...:all-targets'" }})")
74-
val modifiedSourceFileTargets = queryService.query("kind('source file', ${modifiedFilepaths.joinToString(" + ") { "'$it'" }})")
74+
var fineGrainedHashExternalReposSourceTargets = emptyList<Build.Target>()
75+
if (allReposToQuery.isNotEmpty()) {
76+
fineGrainedHashExternalReposSourceTargets = queryService.query("kind('source file', ${allReposToQuery.joinToString(" + ") { "'$it//...:all-targets'" }})")
77+
}
78+
val modifiedSourceFileTargets = queryService.query("${modifiedFilepaths.joinToString(" + ") { "'$it'" }}", supressFailure = true)
7579
val queryDuration = Calendar.getInstance().getTimeInMillis() - queryEpoch
7680
logger.i { "Modified source files queried in $queryDuration" }
7781

cli/src/main/kotlin/com/bazel_diff/bazel/BazelQueryService.kt

+16-5
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,24 @@ class BazelQueryService(
2424
) : KoinComponent {
2525
private val logger: Logger by inject()
2626

27-
suspend fun query(query: String, useCquery: Boolean = false): List<Build.Target> {
27+
suspend fun query(
28+
query: String,
29+
useCquery: Boolean = false,
30+
supressFailure: Boolean = false)
31+
: List<Build.Target> {
2832
// Unfortunately, there is still no direct way to tell if a target is compatible or not with the proto output
2933
// by itself. So we do an extra cquery with the trick at
3034
// https://bazel.build/extending/platforms#cquery-incompatible-target-detection to first find all compatible
3135
// targets.
3236
val compatibleTargetSet =
3337
if (useCquery) {
34-
runQuery(query, useCquery = true, outputCompatibleTargets = true).useLines {
38+
runQuery(query, useCquery = true, outputCompatibleTargets = true, supressFailure = supressFailure).useLines {
3539
it.filter { it.isNotBlank() }.toSet()
3640
}
3741
} else {
3842
emptySet()
3943
}
40-
val outputFile = runQuery(query, useCquery)
44+
val outputFile = runQuery(query, useCquery, supressFailure = supressFailure)
4145

4246
val targets = outputFile.inputStream().buffered().use { proto ->
4347
if (useCquery) {
@@ -58,7 +62,12 @@ class BazelQueryService(
5862
}
5963

6064
@OptIn(ExperimentalCoroutinesApi::class)
61-
private suspend fun runQuery(query: String, useCquery: Boolean, outputCompatibleTargets: Boolean = false): File {
65+
private suspend fun runQuery(
66+
query: String,
67+
useCquery: Boolean,
68+
outputCompatibleTargets: Boolean = false,
69+
supressFailure: Boolean = false
70+
): File {
6271
val queryFile = Files.createTempFile(null, ".txt").toFile()
6372
queryFile.deleteOnExit()
6473
val outputFile = Files.createTempFile(null, ".bin").toFile()
@@ -139,7 +148,9 @@ class BazelQueryService(
139148
)
140149
}
141150

142-
if (result.resultCode != 0) throw RuntimeException("Bazel query failed, exit code ${result.resultCode}")
151+
if (!supressFailure && result.resultCode != 0) {
152+
throw RuntimeException("Bazel query failed, exit code ${result.resultCode}")
153+
}
143154
return outputFile
144155
}
145156
}

0 commit comments

Comments
 (0)