Skip to content

Commit

Permalink
add flag to scanner to detect unlicensed files
Browse files Browse the repository at this point in the history
Add flag `includeUnlicensed` to the scanner configuration. Its default
is `false`. When set to `true`, the scanner add to a `ScanResult` files
without license as LicenseFindings with license set to `NONE`.

This contribution makes possible to the scanner to display all files as
license findings. The ultimate goal is that any file without license is
catched by the scanner, so that curation mechanism can override files
without licenses in cases where a license applies to a whole folder.

Signed-off-by: Kiko Fernandez-Reyes <kiko@erlang.org>
  • Loading branch information
kikofernandez committed Dec 5, 2024
1 parent adbc271 commit 58b863b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
5 changes: 5 additions & 0 deletions model/src/main/kotlin/config/ScannerConfiguration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ data class ScannerConfiguration(
*/
val skipConcluded: Boolean = false,

/**
* A flag to indicate whether the scanner should add files without license to the scanner results.
*/
val includeUnlicensed: Boolean = false,

/**
* A flag to control whether excluded scopes and paths should be skipped during the scan.
*/
Expand Down
38 changes: 36 additions & 2 deletions scanner/src/main/kotlin/Scanner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,15 @@ import org.ossreviewtoolkit.model.FileList
import org.ossreviewtoolkit.model.Identifier
import org.ossreviewtoolkit.model.Issue
import org.ossreviewtoolkit.model.KnownProvenance
import org.ossreviewtoolkit.model.LicenseFinding
import org.ossreviewtoolkit.model.OrtResult
import org.ossreviewtoolkit.model.Package
import org.ossreviewtoolkit.model.PackageType
import org.ossreviewtoolkit.model.ProvenanceResolutionResult
import org.ossreviewtoolkit.model.ScanResult
import org.ossreviewtoolkit.model.ScanSummary
import org.ossreviewtoolkit.model.ScannerRun
import org.ossreviewtoolkit.model.TextLocation
import org.ossreviewtoolkit.model.VcsInfo
import org.ossreviewtoolkit.model.config.DownloaderConfiguration
import org.ossreviewtoolkit.model.config.ScannerConfiguration
Expand Down Expand Up @@ -192,8 +194,6 @@ class Scanner(

val vcsPathsForProvenances = getVcsPathsForProvenances(provenances)

val filteredScanResults = filterScanResultsByVcsPaths(controller.getAllScanResults(), vcsPathsForProvenances)

val files = controller.getAllFileLists().mapTo(mutableSetOf()) { (provenance, fileList) ->
FileList(
provenance = provenance.alignRevisions() as KnownProvenance,
Expand All @@ -207,6 +207,40 @@ class Scanner(
}
}

val filteredScanResults = filterScanResultsByVcsPaths(controller.getAllScanResults(), vcsPathsForProvenances)
.mapTo(mutableSetOf()) { scanResult ->
val licenseFiles = scanResult.summary.licenseFindings.mapTo(mutableSetOf()) { licenseFinding ->
licenseFinding.location.path
}

if (!scannerConfig.includeUnlicensed) {
scanResult.copy(provenance = scanResult.provenance.alignRevisions())
} else {
// Adds files without license to the scanned results
val scanSummary =
controller.getAllFileLists()[scanResult.provenance]?.files
.orEmpty().asSequence().mapNotNull { fileEntry ->
if (fileEntry.path in licenseFiles) {
null
} else {
fileEntry.path
}
}.toSet().let {
(it subtract licenseFiles).mapTo(mutableSetOf()) {
LicenseFinding(license = "NONE", location = TextLocation(it, 1))
}.let {
val allFindings = scanResult.summary.licenseFindings union it
scanResult.summary.copy(licenseFindings = allFindings)
}
}

scanResult.copy(
provenance = scanResult.provenance.alignRevisions(),
summary = scanSummary
)
}
}

val scannerNames = scannerWrappers.mapTo(mutableSetOf()) { it.name }
val scanners = packages.associateBy({ it.id }) { scannerNames }

Expand Down

0 comments on commit 58b863b

Please sign in to comment.