@@ -2,6 +2,7 @@ package com.codacy
22
33import java .io .File
44import java .net .URL
5+
56import ch .qos .logback .classic .{Level , Logger }
67import com .codacy .api .client .{CodacyClient , FailedResponse , SuccessfulResponse }
78import com .codacy .api .helpers .FileHelper
@@ -10,10 +11,11 @@ import com.codacy.api.{CoverageFileReport, CoverageReport, Language}
1011import com .codacy .parsers .CoverageParserFactory
1112import com .codacy .transformation .PathPrefixer
1213import org .slf4j .LoggerFactory
14+ import rapture .json .jsonBackends .play ._
1315import rapture .json .{Json , Serializer }
14- import scopt .{OptionParser , Read }
16+ import scopt .OptionParser
17+
1518import scala .util .Try
16- import rapture .json .jsonBackends .play ._
1719
1820object CodacyCoverageReporter {
1921
@@ -25,16 +27,19 @@ object CodacyCoverageReporter {
2527 logger
2628 }
2729
28- case class Config (language : Language .Value = Language .Python ,
30+ case class Config (languageStr : String = Language .Python .toString,
31+ forceLanguage : Boolean = false ,
2932 projectToken : String = getProjectToken,
3033 coverageReport : File = new File (" coverage.xml" ),
3134 codacyApiBaseUrl : String = getApiBaseUrl,
3235 prefix : String = " " ,
3336 debug : Boolean = false ,
34- commitUUID : Option [String ] = commitUUIDOpt)
37+ commitUUID : Option [String ] = commitUUIDOpt) {
3538
36- implicit def languageRead : Read [Language .Value ] = Read .reads { (s : String ) =>
37- Language .withName(s)
39+ lazy val language : Language .Value =
40+ Language .values.find(_.toString == languageStr).getOrElse(Language .NotDefined )
41+
42+ lazy val hasKnownLanguage : Boolean = language != Language .NotDefined
3843 }
3944
4045 private def getApiBaseUrl : String = {
@@ -71,6 +76,9 @@ object CodacyCoverageReporter {
7176 logger.error(" Maybe you forgot the http:// or https:// ?" )
7277 }
7378
79+ case Some (config) if ! config.hasKnownLanguage && ! config.forceLanguage =>
80+ logger.error(s " Invalid language ${config.languageStr}" )
81+
7482 case Some (config) if config.projectToken.trim.nonEmpty =>
7583 if (config.debug) {
7684 logger.setLevel(Level .DEBUG )
@@ -88,9 +96,12 @@ object CodacyCoverageReporter {
8896 def buildParser : OptionParser [Config ] = {
8997 new scopt.OptionParser [Config ](" codacy-coverage-reporter" ) {
9098 head(" codacy-coverage-reporter" , getClass.getPackage.getImplementationVersion)
91- opt[Language . Value ]('l' , " language" ).required().action { (x, c) =>
92- c.copy(language = x)
99+ opt[String ]('l' , " language" ).required().action { (x, c) =>
100+ c.copy(languageStr = x)
93101 }.text(" your project language" )
102+ opt[Unit ]('f' , " forceLanguage" ).optional().hidden().action { (_, c) =>
103+ c.copy(forceLanguage = true )
104+ }
94105 opt[String ]('t' , " projectToken" ).optional().action { (x, c) =>
95106 c.copy(projectToken = x)
96107 }.text(" your project API token" )
@@ -127,15 +138,15 @@ object CodacyCoverageReporter {
127138 val codacyReportFile = new File (codacyReportFilename)
128139
129140 logger.debug(report.toString)
130- implicit val s3 = implicitly[Serializer [CoverageFileReport ,Json ]]
141+ implicit val s3 = implicitly[Serializer [CoverageFileReport , Json ]]
131142 FileHelper .writeJsonToFile(codacyReportFile, report)
132143
133144 val codacyClient = new CodacyClient (Some (config.codacyApiBaseUrl), projectToken = Some (projectToken))
134145 val coverageServices = new CoverageServices (codacyClient)
135146
136147 logger.info(s " Uploading coverage data... " )
137148
138- coverageServices.sendReport(commitUUID, config.language , report) match {
149+ coverageServices.sendReport(commitUUID, config.languageStr , report) match {
139150 case SuccessfulResponse (value) =>
140151 Right (s " Coverage data uploaded. $value" )
141152 case FailedResponse (message) =>
0 commit comments