diff --git a/src/main/scala/scoverage/ScoverageKeys.scala b/src/main/scala/scoverage/ScoverageKeys.scala index 52b0b262..d581c11b 100644 --- a/src/main/scala/scoverage/ScoverageKeys.scala +++ b/src/main/scala/scoverage/ScoverageKeys.scala @@ -18,4 +18,5 @@ object ScoverageKeys { lazy val coverageCleanSubprojectFiles = settingKey[Boolean]("removes subproject data after an aggregation") lazy val coverageOutputTeamCity = settingKey[Boolean]("turn on teamcity reporting") lazy val coverageScalacPluginVersion = settingKey[String]("version of scalac-scoverage-plugin to use") + lazy val coverageDataDir = settingKey[File]("directory where the measurements will be stored to use") } diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index e72c346b..a04f3c47 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -44,11 +44,12 @@ object ScoverageSbtPlugin extends AutoPlugin { addCommandAlias("coverageOn", ";set coverageEnabled in ThisBuild := true") ++ addCommandAlias("coverageOff", ";set coverageEnabled in ThisBuild := false") - override def projectSettings: Seq[Setting[_]] = Seq( + override def projectSettings: Seq[Setting[_]] = super.projectSettings ++ Seq( ivyConfigurations += ScoveragePluginConfig, coverageReport := coverageReport0.value, coverageAggregate := coverageAggregate0.value, - aggregate in coverageAggregate := false + aggregate in coverageAggregate := false, + coverageDataDir := crossTarget.value ) ++ coverageSettings ++ scalacSettings private lazy val coverageSettings = Seq( @@ -77,7 +78,7 @@ object ScoverageSbtPlugin extends AutoPlugin { } Seq( Some(s"-Xplugin:${pluginPath.getAbsolutePath}"), - Some(s"-P:scoverage:dataDir:${crossTarget.value.getAbsolutePath}/scoverage-data"), + Some(s"-P:scoverage:dataDir:${coverageDataDir.value.getAbsolutePath}/scoverage-data"), Option(coverageExcludedPackages.value.trim).filter(_.nonEmpty).map(v => s"-P:scoverage:excludedPackages:$v"), Option(coverageExcludedFiles.value.trim).filter(_.nonEmpty).map(v => s"-P:scoverage:excludedFiles:$v"), // rangepos is broken in some releases of scala so option to turn it off @@ -103,7 +104,7 @@ object ScoverageSbtPlugin extends AutoPlugin { } private lazy val coverageReport0 = Def.task { - val target = crossTarget.value + val target = coverageDataDir.value val log = streams.value.log log.info(s"Waiting for measurement data to sync...") @@ -132,12 +133,12 @@ object ScoverageSbtPlugin extends AutoPlugin { val log = streams.value.log log.info(s"Aggregating coverage from subprojects...") - val xmlReportFiles = crossTarget.all(aggregateFilter).value map (_ / "scoverage-report" / Constants + val xmlReportFiles = coverageDataDir.all(aggregateFilter).value map (_ / "scoverage-report" / Constants .XMLReportFilename) filter (_.isFile()) CoverageAggregator.aggregate(xmlReportFiles, coverageCleanSubprojectFiles.value) match { case Some(cov) => writeReports( - crossTarget.value, + coverageDataDir.value, sourceDirectories.all(aggregateFilter).value.flatten, cov, coverageOutputCobertura.value, diff --git a/src/sbt-test/scoverage/data-dir/build.sbt b/src/sbt-test/scoverage/data-dir/build.sbt new file mode 100644 index 00000000..d1a342e2 --- /dev/null +++ b/src/sbt-test/scoverage/data-dir/build.sbt @@ -0,0 +1,16 @@ +version := "0.1" + +scalaVersion := "2.10.4" + +libraryDependencies += "org.specs2" %% "specs2" % "2.3.13" % "test" + +coverageDataDir := target.value + +coverageMinimum := 80 + +coverageFailOnMinimum := true + +resolvers ++= { + if (sys.props.get("plugin.version").map(_.endsWith("-SNAPSHOT")).getOrElse(false)) Seq(Resolver.sonatypeRepo("snapshots")) + else Seq.empty +} diff --git a/src/sbt-test/scoverage/data-dir/project/plugins.sbt b/src/sbt-test/scoverage/data-dir/project/plugins.sbt new file mode 100644 index 00000000..8f2837b3 --- /dev/null +++ b/src/sbt-test/scoverage/data-dir/project/plugins.sbt @@ -0,0 +1,14 @@ +val pluginVersion = sys.props.getOrElse( + "plugin.version", + throw new RuntimeException( + """|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin)) + +addSbtPlugin("org.scoverage" % "sbt-scoverage" % pluginVersion) + +resolvers ++= { + if (pluginVersion.endsWith("-SNAPSHOT")) + Seq(Resolver.sonatypeRepo("snapshots")) + else + Seq.empty +} diff --git a/src/sbt-test/scoverage/data-dir/src/main/scala/GoodCoverage.scala b/src/sbt-test/scoverage/data-dir/src/main/scala/GoodCoverage.scala new file mode 100644 index 00000000..f4f3ecae --- /dev/null +++ b/src/sbt-test/scoverage/data-dir/src/main/scala/GoodCoverage.scala @@ -0,0 +1,6 @@ +object GoodCoverage { + + def sum(num1: Int, num2: Int) = { + num1 + num2 + } +} \ No newline at end of file diff --git a/src/sbt-test/scoverage/data-dir/src/test/scala/GoodCoverageSpec.scala b/src/sbt-test/scoverage/data-dir/src/test/scala/GoodCoverageSpec.scala new file mode 100644 index 00000000..cbf6a70d --- /dev/null +++ b/src/sbt-test/scoverage/data-dir/src/test/scala/GoodCoverageSpec.scala @@ -0,0 +1,13 @@ +import org.specs2.mutable._ + +/** + * Created by tbarke001c on 7/8/14. + */ +class GoodCoverageSpec extends Specification { + + "GoodCoverage" should { + "sum two numbers" in { + GoodCoverage.sum(1, 2) mustEqual 3 + } + } +} diff --git a/src/sbt-test/scoverage/data-dir/test b/src/sbt-test/scoverage/data-dir/test new file mode 100644 index 00000000..47174e65 --- /dev/null +++ b/src/sbt-test/scoverage/data-dir/test @@ -0,0 +1,7 @@ +# run scoverage +> clean +> coverage +> test +> coverageReport +$ exists target/scoverage-data +$ exists target/scoverage-report