@@ -28,12 +28,13 @@ import org.ossreviewtoolkit.model.ScanSummary
28
28
import org.ossreviewtoolkit.model.ScannerDetails
29
29
import org.ossreviewtoolkit.model.config.PluginConfiguration
30
30
import org.ossreviewtoolkit.model.config.ScannerConfiguration
31
- import org.ossreviewtoolkit.scanner.CommandLinePathScannerWrapper
31
+ import org.ossreviewtoolkit.scanner.LocalPathScannerWrapper
32
32
import org.ossreviewtoolkit.scanner.ScanContext
33
33
import org.ossreviewtoolkit.scanner.ScanStorage
34
34
import org.ossreviewtoolkit.scanner.ScannerMatcher
35
35
import org.ossreviewtoolkit.scanner.ScannerWrapperConfig
36
36
import org.ossreviewtoolkit.scanner.ScannerWrapperFactory
37
+ import org.ossreviewtoolkit.utils.common.CommandLineTool
37
38
import org.ossreviewtoolkit.utils.common.Options
38
39
import org.ossreviewtoolkit.utils.common.Os
39
40
import org.ossreviewtoolkit.utils.common.ProcessCapture
@@ -45,6 +46,18 @@ import org.semver4j.RangesList
45
46
import org.semver4j.RangesListFactory
46
47
import org.semver4j.Semver
47
48
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
+
48
61
/* *
49
62
* A wrapper for [ScanCode](https://github.com/aboutcode-org/scancode-toolkit).
50
63
*
@@ -68,7 +81,7 @@ class ScanCode internal constructor(
68
81
name : String ,
69
82
private val config : ScanCodeConfig ,
70
83
private val wrapperConfig : ScannerWrapperConfig
71
- ) : CommandLinePathScannerWrapper (name) {
84
+ ) : LocalPathScannerWrapper (name) {
72
85
// This constructor is required by the `RequirementsCommand`.
73
86
constructor (name: String , wrapperConfig: ScannerWrapperConfig ) : this (name, ScanCodeConfig .DEFAULT , wrapperConfig)
74
87
@@ -111,20 +124,12 @@ class ScanCode internal constructor(
111
124
112
125
override val matcher by lazy { ScannerMatcher .create(details, wrapperConfig.matcherConfig) }
113
126
127
+ override val version by lazy { ScanCodeCommand .getVersion() }
128
+
114
129
override val readFromStorage by lazy { wrapperConfig.readFromStorageWithDefault(matcher) }
115
130
116
131
override val writeToStorage by lazy { wrapperConfig.writeToStorageWithDefault(matcher) }
117
132
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
-
128
133
override fun runScanner (path : File , context : ScanContext ): String {
129
134
val resultFile = createOrtTempDir().resolve(" result.json" )
130
135
val process = runScanCode(path, resultFile)
@@ -161,7 +166,7 @@ class ScanCode internal constructor(
161
166
*/
162
167
internal fun runScanCode (path : File , resultFile : File ) =
163
168
ProcessCapture (
164
- command(),
169
+ ScanCodeCommand . command(),
165
170
* commandLineOptions.toTypedArray(),
166
171
// The output format option needs to directly precede the result file path.
167
172
OUTPUT_FORMAT_OPTION , resultFile.absolutePath,
0 commit comments