@@ -19,12 +19,13 @@ class ScoverageSbtPlugin extends sbt.AutoPlugin {
1919 lazy val coverageAggregate = taskKey[Unit ](" aggregate reports from subprojects" )
2020 val coverageExcludedPackages = settingKey[String ](" regex for excluded packages" )
2121 val coverageExcludedFiles = settingKey[String ](" regex for excluded file paths" )
22- val coverageMinimumCoverage = settingKey[Double ](" scoverage-minimum-coverage" )
23- val coverageFailOnMinimumCoverage = settingKey[Boolean ](" if coverage is less than this value then fail build" )
22+ val coverageMinimum = settingKey[Double ](" scoverage-minimum-coverage" )
23+ val coverageFailOnMinimum = settingKey[Boolean ](" if coverage is less than this value then fail build" )
2424 val coverageHighlighting = settingKey[Boolean ](" enables range positioning for highlighting" )
2525 val coverageOutputCobertua = settingKey[Boolean ](" enables cobertura XML report generation" )
2626 val coverageOutputXML = settingKey[Boolean ](" enables xml report generation" )
2727 val coverageOutputHTML = settingKey[Boolean ](" enables html report generation" )
28+ val coverageCleanSubprojectFiles = settingKey[Boolean ](" removes subproject data after an aggregation" )
2829 }
2930
3031 var enabled = false
@@ -47,7 +48,14 @@ class ScoverageSbtPlugin extends sbt.AutoPlugin {
4748 Thread .sleep(1000 ) // have noticed some delay in writing on windows, hacky but works
4849
4950 loadCoverage(target, s) match {
50- case Some (cov) => writeReports(target, baseDirectory.value, (scalaSource in Compile ).value, cov, s)
51+ case Some (cov) => writeReports(target,
52+ baseDirectory.value,
53+ (scalaSource in Compile ).value,
54+ cov,
55+ coverageOutputCobertua.value,
56+ coverageOutputXML.value,
57+ coverageOutputHTML.value,
58+ s)
5159 case None => s.log.warn(" No coverage data, skipping reports" )
5260 }
5361 },
@@ -60,9 +68,16 @@ class ScoverageSbtPlugin extends sbt.AutoPlugin {
6068 val s = (streams in Global ).value
6169 s.log.info(s " Aggregating coverage from subprojects... " )
6270 val base = baseDirectory.value
63- CoverageAggregator .aggregate(base) match {
71+ CoverageAggregator .aggregate(base, coverageCleanSubprojectFiles.value ) match {
6472 case Some (cov) =>
65- writeReports(crossTarget.value, base, (scalaSource in Compile ).value, cov, s)
73+ writeReports(crossTarget.value,
74+ base,
75+ (scalaSource in Compile ).value,
76+ cov,
77+ coverageOutputCobertua.value,
78+ coverageOutputXML.value,
79+ coverageOutputHTML.value,
80+ s)
6681 val cfmt = cov.statementCoverageFormatted
6782 s.log.info(s " Aggregation complete. Coverage was [ $cfmt] " )
6883 case None => s.log.warn(" No subproject data to aggregate, skipping reports" )
@@ -91,25 +106,33 @@ class ScoverageSbtPlugin extends sbt.AutoPlugin {
91106
92107 coverageExcludedPackages := " " ,
93108 coverageExcludedFiles := " " ,
94- coverageMinimumCoverage := 0 , // default is no minimum
95- coverageFailOnMinimumCoverage := false ,
109+ coverageMinimum := 0 , // default is no minimum
110+ coverageFailOnMinimum := false ,
96111 coverageHighlighting := true ,
97112 coverageOutputXML := true ,
98113 coverageOutputHTML := true ,
99114 coverageOutputCobertua := true ,
115+ coverageCleanSubprojectFiles := true ,
100116
101117 // disable parallel execution to work around "classes.bak" bug in SBT
102118 parallelExecution in Test := false
103119 )
104120
105121 private def postTestReport = {
106- (crossTarget, baseDirectory, scalaSource in Compile , coverageMinimumCoverage, coverageFailOnMinimumCoverage , streams in Global ) map {
122+ (crossTarget, baseDirectory, scalaSource in Compile , coverageMinimum, coverageFailOnMinimum , streams in Global ) map {
107123 (target, baseDirectory, compileSource, min, failOnMin, streams) =>
108124 Tests .Cleanup {
109125 () => if (enabled) {
110126 loadCoverage(target, streams) foreach {
111127 c =>
112- writeReports(target, baseDirectory, compileSource, c, streams)
128+ writeReports(target,
129+ baseDirectory,
130+ compileSource,
131+ c,
132+ coverageOutputCobertua.value,
133+ coverageOutputXML.value,
134+ coverageOutputHTML.value,
135+ streams)
113136 checkCoverage(c, streams, min, failOnMin)
114137 }
115138 ()
@@ -141,6 +164,9 @@ class ScoverageSbtPlugin extends sbt.AutoPlugin {
141164 baseDirectory : File ,
142165 compileSourceDirectory : File ,
143166 coverage : Coverage ,
167+ coverageOutputCobertua : Boolean ,
168+ coverageOutputXML : Boolean ,
169+ coverageOutputHTML : Boolean ,
144170 s : TaskStreams ): Unit = {
145171 s.log.info(s " Generating scoverage reports... " )
146172
@@ -149,18 +175,18 @@ class ScoverageSbtPlugin extends sbt.AutoPlugin {
149175 coberturaDir.mkdirs()
150176 reportDir.mkdirs()
151177
152- if (coverageOutputCobertua.value ) {
178+ if (coverageOutputCobertua) {
153179 s.log.info(s " Written Cobertura report [ ${coberturaDir.getAbsolutePath}/cobertura.xml] " )
154180 new CoberturaXmlWriter (baseDirectory, coberturaDir).write(coverage)
155181 }
156182
157- if (coverageOutputXML.value ) {
183+ if (coverageOutputXML) {
158184 s.log.info(s " Written XML coverage report [ ${reportDir.getAbsolutePath}/scoverage.xml] " )
159185 new ScoverageXmlWriter (compileSourceDirectory, reportDir, false ).write(coverage)
160186 new ScoverageXmlWriter (compileSourceDirectory, reportDir, true ).write(coverage)
161187 }
162188
163- if (coverageOutputHTML.value ) {
189+ if (coverageOutputHTML) {
164190 s.log.info(s " Written HTML coverage report [ ${reportDir.getAbsolutePath}/index.html] " )
165191 new ScoverageHtmlWriter (compileSourceDirectory, reportDir).write(coverage)
166192 }
0 commit comments