Skip to content

Commit 9a48255

Browse files
authored
Merge pull request #28 from scalacenter/input-validation
Validate input of plugins: projects and Scala versions
2 parents 0f6545d + 81651b8 commit 9a48255

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

sbt-plugin/src/main/scala/ch/epfl/scala/SubmitDependencyGraph.scala

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,21 +92,32 @@ object SubmitDependencyGraph {
9292
// project refs that have a Scala version, filtered according to input.projects
9393
private def getScalaProjectRefs(state: State, input: SubmitInput): Seq[ProjectRef] = {
9494
val loadedBuild = state.setting(Keys.loadedBuild)
95-
val allScalaProjectRefs = loadedBuild.allProjectRefs
95+
val allProjectRefs = loadedBuild.allProjectRefs
9696
.map(_._1)
9797
.filter(ref => state.getSetting(ref / Keys.scalaVersion).isDefined)
98-
val projectFilter = input.projects.toSet
99-
if (projectFilter.isEmpty) allScalaProjectRefs
100-
else allScalaProjectRefs.filter(ref => projectFilter.contains(ref.project))
98+
if (input.projects.isEmpty) allProjectRefs
99+
else {
100+
val allProjectNames = allProjectRefs.map(_.project)
101+
val unknownProjects = input.projects.filter(p => !allProjectNames.contains(p))
102+
if (unknownProjects.nonEmpty)
103+
throw new MessageOnlyException(s"Unknown projects: ${unknownProjects.mkString(", ")}")
104+
allProjectRefs.filter(ref => input.projects.contains(ref.project))
105+
}
101106
}
102107

103108
private def getScalaVersions(state: State, input: SubmitInput, projectRefs: Seq[ProjectRef]): Seq[String] = {
104-
val scalaVersionFilter = input.scalaVersions.toSet
105-
val allScalaVersions = projectRefs
109+
val allVersions = projectRefs
106110
.flatMap(projectRef => state.setting(projectRef / Keys.crossScalaVersions))
107111
.distinct
108-
if (scalaVersionFilter.isEmpty) allScalaVersions
109-
else allScalaVersions.filter(scalaVersionFilter.contains)
112+
if (input.scalaVersions.isEmpty) allVersions
113+
else {
114+
val unknownVersions = input.scalaVersions.filter(v => !allVersions.contains(v))
115+
if (unknownVersions.nonEmpty) {
116+
val projectSelection = if (input.projects.nonEmpty) "selected projects" else "build"
117+
state.log.warn(s"Unknown Scala versions in the $projectSelection: ${unknownVersions.mkString(", ")}")
118+
}
119+
input.scalaVersions
120+
}
110121
}
111122

112123
private def githubDependencySnapshot(state: State): DependencySnapshot = {
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
> 'githubSubmitDependencyGraph {}'
22
> checkManifests 5
3-
> 'githubSubmitDependencyGraph {"projects":[], "scalaVersions":["2.13.8"]}'
3+
4+
> 'githubSubmitDependencyGraph {"scalaVersions":["2.13.8"]}'
45
> checkManifests 3
6+
57
> 'githubSubmitDependencyGraph {"projects":[], "scalaVersions":["2.12.16", "2.13.8"]}'
68
> checkManifests 4
9+
710
> 'githubSubmitDependencyGraph {"projects":["a", "b"], "scalaVersions":[]}'
811
> checkManifests 4
9-
> 'githubSubmitDependencyGraph {"projects":["a"], "scalaVersions":["2.12.16", "3.1.3"]}'
12+
13+
# slightly different scala versions than defined in project a
14+
# it should still work since the binary versions are the same
15+
> 'githubSubmitDependencyGraph {"projects":["a"], "scalaVersions":["2.12.15", "3.1.2"]}'
1016
> checkManifests 2
17+
18+
# Unknown project c, it should fail
19+
-> 'githubSubmitDependencyGraph {"projects":["b", "c"]}'

0 commit comments

Comments
 (0)