Skip to content

Commit 8d88e71

Browse files
authored
Merge pull request #366 from livongo/beplat-72-rebase
provide possibility to set up data dir(Rebased to newest version)
2 parents 99ba2c1 + 58ae1b3 commit 8d88e71

File tree

9 files changed

+82
-5
lines changed

9 files changed

+82
-5
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,21 @@ These settings will be enforced when the reports are generated. If you generate
102102
an aggregate report using `coverageAggregate` then these settings will apply to
103103
that report.
104104

105+
### Override Location for Coverage Data And Report
106+
107+
If desired, one could override the default location for generating the sbt report and data through setting `coverageDataDir`:
108+
109+
Example in data-dir test:
110+
```scala
111+
coverageDataDir := target.value / "custom-test"
112+
```
113+
114+
Can also be set through the sbt set directive
115+
```scala
116+
set coverageDataDir := file("/tmp")
117+
```
118+
119+
105120
## Trouble-shooting failing tests
106121

107122
scoverage does a lot of file writing behind the scenes in order to track which

src/main/scala/scoverage/ScoverageKeys.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ object ScoverageKeys {
1818
lazy val coverageOutputDebug = settingKey[Boolean]("turn on the debug report")
1919
lazy val coverageOutputTeamCity = settingKey[Boolean]("turn on teamcity reporting")
2020
lazy val coverageScalacPluginVersion = settingKey[String]("version of scalac-scoverage-plugin to use")
21+
lazy val coverageDataDir = settingKey[File]("directory where the measurements and report files will be stored")
2122
// format: on
2223

2324
@deprecated("Use coverageMinimumStmtTotal instead", "v1.8.0")

src/main/scala/scoverage/ScoverageSbtPlugin.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ object ScoverageSbtPlugin extends AutoPlugin {
6060
ivyConfigurations += ScoveragePluginConfig,
6161
coverageReport := coverageReport0.value,
6262
coverageAggregate := coverageAggregate0.value,
63-
coverageAggregate / aggregate := false
63+
coverageAggregate / aggregate := false,
64+
coverageDataDir := crossTarget.value
6465
) ++ coverageSettings ++ scalacSettings
6566

6667
private lazy val coverageSettings = Seq(
@@ -99,7 +100,7 @@ object ScoverageSbtPlugin extends AutoPlugin {
99100
Seq(
100101
Some(s"-Xplugin:${pluginPath.getAbsolutePath}"),
101102
Some(
102-
s"-P:scoverage:dataDir:${crossTarget.value.getAbsolutePath}/scoverage-data"
103+
s"-P:scoverage:dataDir:${coverageDataDir.value.getAbsolutePath}/scoverage-data"
103104
),
104105
Option(coverageExcludedPackages.value.trim)
105106
.filter(_.nonEmpty)
@@ -136,7 +137,7 @@ object ScoverageSbtPlugin extends AutoPlugin {
136137
}
137138

138139
private lazy val coverageReport0 = Def.task {
139-
val target = crossTarget.value
140+
val target = coverageDataDir.value
140141
implicit val log = streams.value.log
141142

142143
log.info(s"Waiting for measurement data to sync...")
@@ -169,13 +170,13 @@ object ScoverageSbtPlugin extends AutoPlugin {
169170
implicit val log = streams.value.log
170171
log.info(s"Aggregating coverage from subprojects...")
171172

172-
val dataDirs = crossTarget
173+
val dataDirs = coverageDataDir
173174
.all(aggregateFilter)
174175
.value map (_ / Constants.DataDir) filter (_.isDirectory)
175176
CoverageAggregator.aggregate(dataDirs) match {
176177
case Some(cov) =>
177178
writeReports(
178-
crossTarget.value,
179+
coverageDataDir.value,
179180
sourceDirectories.all(aggregateFilter).value.flatten,
180181
cov,
181182
coverageOutputCobertura.value,
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
version := "0.1"
2+
3+
scalaVersion := "2.13.6"
4+
5+
libraryDependencies += "org.specs2" %% "specs2-core" % "4.12.10" % "test"
6+
7+
coverageDataDir := target.value / "custom-test"
8+
9+
coverageMinimum := 80
10+
11+
coverageFailOnMinimum := true
12+
13+
resolvers ++= {
14+
if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT")))
15+
Seq(Resolver.sonatypeRepo("snapshots"))
16+
else Seq.empty
17+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sbt.version=1.5.3
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
val pluginVersion = sys.props.getOrElse(
2+
"plugin.version",
3+
throw new RuntimeException(
4+
"""|The system property 'plugin.version' is not defined.
5+
|Specify this property using the scriptedLaunchOpts -D.""".stripMargin
6+
)
7+
)
8+
9+
addSbtPlugin("org.scoverage" % "sbt-scoverage" % pluginVersion)
10+
11+
resolvers ++= {
12+
if (pluginVersion.endsWith("-SNAPSHOT"))
13+
Seq(Resolver.sonatypeRepo("snapshots"))
14+
else
15+
Seq.empty
16+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
object GoodCoverage {
2+
3+
def sum(num1: Int, num2: Int) = {
4+
num1 + num2
5+
}
6+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import org.specs2.mutable._
2+
3+
/**
4+
* Created by tbarke001c on 7/8/14.
5+
*/
6+
class GoodCoverageSpec extends Specification {
7+
8+
"GoodCoverage" should {
9+
"sum two numbers" in {
10+
GoodCoverage.sum(1, 2) mustEqual 3
11+
}
12+
}
13+
}

src/sbt-test/scoverage/data-dir/test

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# run scoverage
2+
> clean
3+
> coverage
4+
> test
5+
> coverageReport
6+
$ exists target/custom-test/scoverage-data
7+
$ exists target/custom-test/scoverage-report

0 commit comments

Comments
 (0)