in server/server/src/main/kotlin/org/jetbrains/bazel/server/sync/sharding/BazelBuildTargetSharder.kt [45:102]
suspend fun expandAndShardTargets(
pathResolver: BazelPathsResolver,
bazelInfo: BazelInfo,
targets: TargetCollection,
context: WorkspaceContext,
featureFlags: FeatureFlags,
bazelRunner: BazelRunner,
bspClientLogger: BspClientLogger,
firstPhaseProject: PhasedSyncProject?,
): ShardedTargetsResult {
if (firstPhaseProject != null) {
return ShardedTargetsResult(
shardTargetsToBatches(firstPhaseProject.modules.keys.toList(), emptyList(), getTargetShardSize(context)),
BazelStatus.SUCCESS,
)
}
val includes = targets.values
val excludes = targets.excludedValues
val shardingApproach = getShardingApproach(context)
return when (shardingApproach) {
ShardingApproach.SHARD_ONLY ->
ShardedTargetsResult(
shardTargetsToBatches(includes, excludes, getTargetShardSize(context)),
BazelStatus.SUCCESS,
)
ShardingApproach.QUERY_AND_SHARD -> {
val singleTargets =
WildcardTargetExpander.queryIndividualTargets(includes, excludes, bazelRunner, context)
ShardedTargetsResult(
shardTargetsToBatches(singleTargets.singleTargets, emptyList(), getTargetShardSize(context)),
singleTargets.buildResult,
)
}
ShardingApproach.EXPAND_AND_SHARD -> {
val expandedTargets =
expandWildcardTargets(
pathResolver,
bazelInfo,
includes,
excludes,
bazelRunner,
bspClientLogger,
context,
featureFlags,
)
if (expandedTargets.buildResult == BazelStatus.FATAL_ERROR) {
ShardedTargetsResult(ShardedTargetList(emptyList()), expandedTargets.buildResult)
} else {
ShardedTargetsResult(
shardTargetsToBatches(expandedTargets.singleTargets, emptyList(), getTargetShardSize(context)),
expandedTargets.buildResult,
)
}
}
}
}