diff --git a/src/main/kotlin/slack/cli/sarif/MergeSarifReports.kt b/src/main/kotlin/slack/cli/sarif/MergeSarifReports.kt index ddb7b26..5c4602e 100644 --- a/src/main/kotlin/slack/cli/sarif/MergeSarifReports.kt +++ b/src/main/kotlin/slack/cli/sarif/MergeSarifReports.kt @@ -290,9 +290,14 @@ public class MergeSarifReports : CliktCommand(help = DESCRIPTION) { private fun merge(inputs: List) { log("Parsing ${inputs.size} sarif files") + val parsed = loadSarifs(inputs) val mergedSarif = - loadSarifs(inputs) - .merge(levelOverride = level, removeUriPrefixes = removeUriPrefixes, log = ::log) + when (parsed.size) { + 0 -> error("No sarif files parsed. Consider using --allow-empty") + 1 -> parsed[0] + else -> + parsed.merge(levelOverride = level, removeUriPrefixes = removeUriPrefixes, log = ::log) + } log("Writing merged sarif to $outputFile") prepareOutput() outputFile.writeText(SarifSerializer.toJson(mergedSarif)) diff --git a/src/main/kotlin/slack/cli/sarif/SarifUtil.kt b/src/main/kotlin/slack/cli/sarif/SarifUtil.kt index eef78cd..4d9c1a6 100644 --- a/src/main/kotlin/slack/cli/sarif/SarifUtil.kt +++ b/src/main/kotlin/slack/cli/sarif/SarifUtil.kt @@ -116,9 +116,9 @@ internal fun List.merge( removeUriPrefixes: Boolean = false, log: (String) -> Unit, ): SarifSchema210 { + check(isNotEmpty()) { "Must have at least one sarif file to merge!" } + log("Merging $size sarif files") - val sortedMergedRules = - flatMap { it.runs.single().tool.driver.rules.orEmpty() }.associateBy { it.id }.toSortedMap() val mergedResults = flatMap { it.runs.single().results.orEmpty() } // Some projects produce multiple reports for different variants, so we need to @@ -127,6 +127,14 @@ internal fun List.merge( .distinctBy { it.shallowHash } .also { log("Merged ${it.size} results") } + if (mergedResults.isEmpty()) { + // Nothing to do here, just return the first + return this[0] + } + + val sortedMergedRules = + flatMap { it.runs.single().tool.driver.rules.orEmpty() }.associateBy { it.id }.toSortedMap() + // Update rule.ruleIndex to match the index in rulesToAdd val ruleIndicesById = sortedMergedRules.entries.withIndex().associate { (index, entry) -> entry.key to index }