diff --git a/cli/src/main/kotlin/com/bazel_diff/cli/GenerateHashesCommand.kt b/cli/src/main/kotlin/com/bazel_diff/cli/GenerateHashesCommand.kt index 17046ae..f6f3e8e 100644 --- a/cli/src/main/kotlin/com/bazel_diff/cli/GenerateHashesCommand.kt +++ b/cli/src/main/kotlin/com/bazel_diff/cli/GenerateHashesCommand.kt @@ -78,6 +78,13 @@ class GenerateHashesCommand : Callable { ) var fineGrainedHashExternalRepos: Set = emptySet() + @CommandLine.Option( + names = ["--fineGrainedHashExternalReposFile"], + description = + [ + "A text file containing a newline separated list of external repos. Similar to --fineGrainedHashExternalRepos but helps you avoid exceeding max arg length. Mutually exclusive with --fineGrainedHashExternalRepos."]) + var fineGrainedHashExternalReposFile: File? = null + @CommandLine.Option( names = ["--useCquery"], negatable = true, @@ -192,6 +199,7 @@ class GenerateHashesCommand : Callable { keepGoing, depsMappingJSONPath != null, fineGrainedHashExternalRepos, + fineGrainedHashExternalReposFile, excludeExternalTargets, ), loggingModule(parent.verbose), diff --git a/cli/src/main/kotlin/com/bazel_diff/di/Modules.kt b/cli/src/main/kotlin/com/bazel_diff/di/Modules.kt index 7efb826..0ac7075 100644 --- a/cli/src/main/kotlin/com/bazel_diff/di/Modules.kt +++ b/cli/src/main/kotlin/com/bazel_diff/di/Modules.kt @@ -30,8 +30,19 @@ fun hasherModule( keepGoing: Boolean, trackDeps: Boolean, fineGrainedHashExternalRepos: Set, + fineGrainedHashExternalReposFile: File?, excludeExternalTargets: Boolean, ): Module = module { + if (fineGrainedHashExternalReposFile != null && fineGrainedHashExternalRepos.isNotEmpty()) { + System.err.println("Error: fineGrainedHashExternalReposFile and fineGrainedHashExternalRepos are mutually exclusive - please provide only one of them") + System.exit(1) + } + val updatedFineGrainedHashExternalRepos = fineGrainedHashExternalReposFile?.let { file -> + file.readLines() + .filter { it.isNotBlank() } + .toSet() + } ?: fineGrainedHashExternalRepos + val cmd: MutableList = ArrayList().apply { add(bazelPath.toString()) @@ -60,11 +71,11 @@ fun hasherModule( keepGoing, debug) } - single { BazelClient(useCquery, fineGrainedHashExternalRepos, excludeExternalTargets) } + single { BazelClient(useCquery, updatedFineGrainedHashExternalRepos, excludeExternalTargets) } single { BuildGraphHasher(get()) } single { TargetHasher() } - single { RuleHasher(useCquery, trackDeps, fineGrainedHashExternalRepos) } - single { SourceFileHasherImpl(fineGrainedHashExternalRepos) } + single { RuleHasher(useCquery, trackDeps, updatedFineGrainedHashExternalRepos) } + single { SourceFileHasherImpl(updatedFineGrainedHashExternalRepos) } single { ExternalRepoResolver(workingDirectory, bazelPath, outputPath) } single(named("working-directory")) { workingDirectory } single(named("output-base")) { outputPath }