@@ -28,12 +28,13 @@ import org.ossreviewtoolkit.model.ScanSummary
2828import org.ossreviewtoolkit.model.ScannerDetails
2929import org.ossreviewtoolkit.model.config.PluginConfiguration
3030import org.ossreviewtoolkit.model.config.ScannerConfiguration
31- import org.ossreviewtoolkit.scanner.CommandLinePathScannerWrapper
31+ import org.ossreviewtoolkit.scanner.LocalPathScannerWrapper
3232import org.ossreviewtoolkit.scanner.ScanContext
3333import org.ossreviewtoolkit.scanner.ScanStorage
3434import org.ossreviewtoolkit.scanner.ScannerMatcher
3535import org.ossreviewtoolkit.scanner.ScannerWrapperConfig
3636import org.ossreviewtoolkit.scanner.ScannerWrapperFactory
37+ import org.ossreviewtoolkit.utils.common.CommandLineTool
3738import org.ossreviewtoolkit.utils.common.Options
3839import org.ossreviewtoolkit.utils.common.Os
3940import org.ossreviewtoolkit.utils.common.ProcessCapture
@@ -45,6 +46,18 @@ import org.semver4j.RangesList
4546import org.semver4j.RangesListFactory
4647import org.semver4j.Semver
4748
49+ object ScanCodeCommand : CommandLineTool {
50+ override fun command (workingDir : File ? ) =
51+ listOfNotNull(workingDir, if (Os .isWindows) " scancode.bat" else " scancode" ).joinToString(File .separator)
52+
53+ override fun getVersionRequirement (): RangesList = RangesListFactory .create(" >=30.0.0" )
54+
55+ override fun transformVersion (output : String ): String =
56+ output.lineSequence().firstNotNullOfOrNull { line ->
57+ line.withoutPrefix(" ScanCode version" )?.removePrefix(" :" )?.trim()
58+ }.orEmpty()
59+ }
60+
4861/* *
4962 * A wrapper for [ScanCode](https://github.com/aboutcode-org/scancode-toolkit).
5063 *
@@ -68,7 +81,7 @@ class ScanCode internal constructor(
6881 name : String ,
6982 private val config : ScanCodeConfig ,
7083 private val wrapperConfig : ScannerWrapperConfig
71- ) : CommandLinePathScannerWrapper (name) {
84+ ) : LocalPathScannerWrapper (name) {
7285 // This constructor is required by the `RequirementsCommand`.
7386 constructor (name: String , wrapperConfig: ScannerWrapperConfig ) : this (name, ScanCodeConfig .DEFAULT , wrapperConfig)
7487
@@ -111,20 +124,12 @@ class ScanCode internal constructor(
111124
112125 override val matcher by lazy { ScannerMatcher .create(details, wrapperConfig.matcherConfig) }
113126
127+ override val version by lazy { ScanCodeCommand .getVersion() }
128+
114129 override val readFromStorage by lazy { wrapperConfig.readFromStorageWithDefault(matcher) }
115130
116131 override val writeToStorage by lazy { wrapperConfig.writeToStorageWithDefault(matcher) }
117132
118- override fun command (workingDir : File ? ) =
119- listOfNotNull(workingDir, if (Os .isWindows) " scancode.bat" else " scancode" ).joinToString(File .separator)
120-
121- override fun getVersionRequirement (): RangesList = RangesListFactory .create(" >=30.0.0" )
122-
123- override fun transformVersion (output : String ): String =
124- output.lineSequence().firstNotNullOfOrNull { line ->
125- line.withoutPrefix(" ScanCode version" )?.removePrefix(" :" )?.trim()
126- }.orEmpty()
127-
128133 override fun runScanner (path : File , context : ScanContext ): String {
129134 val resultFile = createOrtTempDir().resolve(" result.json" )
130135 val process = runScanCode(path, resultFile)
@@ -161,7 +166,7 @@ class ScanCode internal constructor(
161166 */
162167 internal fun runScanCode (path : File , resultFile : File ) =
163168 ProcessCapture (
164- command(),
169+ ScanCodeCommand . command(),
165170 * commandLineOptions.toTypedArray(),
166171 // The output format option needs to directly precede the result file path.
167172 OUTPUT_FORMAT_OPTION , resultFile.absolutePath,
0 commit comments