aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Christopher Vogt <oss.nsp@cvogt.org>2017-03-19 22:15:02 -0400
committerGitHub <noreply@github.com>2017-03-19 22:15:02 -0400
commitfebf7d987f643f3e071510812373778608a480ac (patch)
tree3f2321914d91df63717e3bd6df08bb11574bd7b7
parent092616b3e24deb522ae58d66b24a503efb0a486b (diff)
parent5388bb116834196e1b0a9bd9f2622f36e842b3be (diff)
downloadcbt-febf7d987f643f3e071510812373778608a480ac.tar.gz
cbt-febf7d987f643f3e071510812373778608a480ac.tar.bz2
cbt-febf7d987f643f3e071510812373778608a480ac.zip
Merge pull request #447 from cvogt/chris
Get rid of the hacky "essential" plugins separation
-rw-r--r--build/build.scala6
-rw-r--r--examples/scalariform-example/build/build.scala7
-rw-r--r--libraries/eval/build/build/build.scala7
-rw-r--r--plugins/essentials/build/build.scala10
-rw-r--r--plugins/scalariform/Scalariform.scala51
-rw-r--r--stage1/Stage1.scala6
-rw-r--r--stage1/cbt.scala1
-rw-r--r--stage2/BasicBuild.scala10
-rw-r--r--stage2/BuildBuild.scala13
-rw-r--r--stage2/Lib.scala13
-rw-r--r--stage2/Plugin.scala4
-rw-r--r--stage2/plugins/CommandLineOverrides.scala (renamed from plugins/essentials/CommandLineOverrides.scala)0
-rw-r--r--stage2/plugins/DynamicOverrides.scala (renamed from plugins/essentials/DynamicOverrides.scala)0
-rw-r--r--stage2/plugins/MultipleScalaVersions.scala (renamed from plugins/essentials/MultipleScalaVersions.scala)0
-rw-r--r--stage2/plugins/Readme.md (renamed from plugins/essentials/Readme.md)0
-rw-r--r--stage2/plugins/SnapshotVersion.scala (renamed from plugins/essentials/SnapshotVersion.scala)0
16 files changed, 47 insertions, 81 deletions
diff --git a/build/build.scala b/build/build.scala
index 8f094c3..496acdc 100644
--- a/build/build.scala
+++ b/build/build.scala
@@ -11,11 +11,11 @@ class Build(val context: Context) extends Shared with PublishLocal{
override def dependencies = {
super.dependencies ++ Resolver(mavenCentral).bind(
MavenDependency("org.eclipse.jgit", "org.eclipse.jgit", "4.2.0.201601211800-r"),
- ScalaDependency("org.scala-lang.modules","scala-xml","1.0.5")
+ ScalaDependency("org.scala-lang.modules","scala-xml",constants.scalaXmlVersion)
)
- }
+ } :+ libraries.eval
override def sources = Seq(
"nailgun_launcher", "stage1", "stage2", "compatibility"
- ).map( projectDirectory / _ ).flatMap( _.listFiles )
+ ).map( projectDirectory / _ ).flatMap( _.listOrFail )
}
diff --git a/examples/scalariform-example/build/build.scala b/examples/scalariform-example/build/build.scala
index 91ff67a..cc09f3a 100644
--- a/examples/scalariform-example/build/build.scala
+++ b/examples/scalariform-example/build/build.scala
@@ -3,15 +3,16 @@ import scalariform.formatter.preferences._
class Build(val context: Context) extends BaseBuild with Scalariform {
override def compile = {
- scalariformFormat
+ scalariform()
super.compile
}
- override def scalariformPreferences =
- FormattingPreferences()
+ override def scalariform = super.scalariform.copy(
+ preferences = FormattingPreferences()
.setPreference(SpacesAroundMultiImports, true)
.setPreference(DoubleIndentClassDeclaration, true)
.setPreference(RewriteArrowSymbols, true)
+ )
final def breakFormatting = {
import java.nio.file._
diff --git a/libraries/eval/build/build/build.scala b/libraries/eval/build/build/build.scala
index b93554e..af4eb64 100644
--- a/libraries/eval/build/build/build.scala
+++ b/libraries/eval/build/build/build.scala
@@ -1,8 +1,5 @@
import cbt._
-class Build(val context: Context) extends BuildBuildWithoutEssentials{
- // this is used by the essentials plugin, so we can't depend on it
- override def dependencies = super.dependencies ++ Seq(
- plugins.scalaTest
- )
+class Build(val context: Context) extends BuildBuild{
+ override def dependencies = super.dependencies :+ plugins.scalaTest
}
diff --git a/plugins/essentials/build/build.scala b/plugins/essentials/build/build.scala
deleted file mode 100644
index 450130a..0000000
--- a/plugins/essentials/build/build.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-import cbt._
-// TODO: maybe move this back into stage2 to avoid having to call zinc separately for this as a plugin
-// and to avoid the special casing "BuildBuildWithoutEssentials"
-class Build(val context: Context) extends BaseBuild{
- override def dependencies = (
- super.dependencies
- :+ context.cbtDependency
- :+ libraries.eval
- )
-}
diff --git a/plugins/scalariform/Scalariform.scala b/plugins/scalariform/Scalariform.scala
index 0612469..8cfc252 100644
--- a/plugins/scalariform/Scalariform.scala
+++ b/plugins/scalariform/Scalariform.scala
@@ -9,16 +9,10 @@ import scalariform.formatter.preferences.FormattingPreferences
import scalariform.parser.ScalaParserException
trait Scalariform extends BaseBuild {
- final def scalariformFormat: ExitCode = {
- Scalariform.format(sourceFiles, scalariformPreferences, scalaVersion)
- ExitCode.Success
- }
-
- def scalariformPreferences: FormattingPreferences = Scalariform.defaultPreferences
+ def scalariform = Scalariform.apply(lib, sourceFiles.filter(_.string endsWith ".scala"), scalaVersion).config()
}
-object Scalariform {
-
+object Scalariform{
val defaultPreferences: FormattingPreferences = {
import scalariform.formatter.preferences._
FormattingPreferences()
@@ -32,30 +26,27 @@ object Scalariform {
.setPreference(DoubleIndentClassDeclaration, false)
}
- private val scalaFileMatcher = FileSystems.getDefault.getPathMatcher("glob:**.scala")
-
- def format(files: Seq[File], preferences: FormattingPreferences, scalaVersion: String): Unit = {
- var reformattedCount: Int = 0
- for (file <- files if file.exists) {
- val path = file.toPath
- if(scalaFileMatcher.matches(path)) {
- try {
- val sourceCode = new String(readAllBytes(path))
- val formatted = ScalaFormatter.format(
- sourceCode,
- preferences,
- Some(scalaVersion)
- )
- if (sourceCode != formatted) {
- write(path, formatted.getBytes)
- reformattedCount += 1
+ case class apply( lib: Lib, files: Seq[File], scalaVersion: String ){
+ case class config(
+ preferences: FormattingPreferences = Scalariform.defaultPreferences
+ ) extends (() => Seq[File]){
+ def apply = {
+ val (successes, errors) = lib.transformFilesOrError( files, in =>
+ try{
+ Right( ScalaFormatter.format( in, preferences, Some(scalaVersion) ) )
+ } catch {
+ case e: ScalaParserException => Left( e )
}
- } catch {
- case e: ScalaParserException => System.err.println(s"Scalariform parser error: ${e.getMessage} when formatting: $file")
- }
+ )
+ if(errors.nonEmpty)
+ throw new RuntimeException(
+ "Scalariform failed to parse some files:\n" ++ errors.map{
+ case (file, error) => file.string ++ ": " ++ error.getMessage
+ }.mkString("\n"),
+ errors.head._2
+ )
+ successes
}
}
- if (reformattedCount > 0) System.err.println(s"Formatted $reformattedCount Scala sources")
}
-
}
diff --git a/stage1/Stage1.scala b/stage1/Stage1.scala
index e419e67..c243cc0 100644
--- a/stage1/Stage1.scala
+++ b/stage1/Stage1.scala
@@ -91,8 +91,10 @@ object Stage1{
import paths._
val stage2sourceFiles = (
- stage2.listFiles ++ (stage2 ++ "/plugins").listFiles
- ).toVector.filter(_.isFile).filter(_.toString.endsWith(".scala"))
+ stage2.listFiles
+ ++ (stage2 / "plugins").listOrFail
+ ++ (cbtHome / "libraries" / "eval").listOrFail
+ ).filter(_.isFile).filter(_.toString.endsWith(".scala"))
val cls = this.getClass.getClassLoader.loadClass("cbt.NailgunLauncher")
diff --git a/stage1/cbt.scala b/stage1/cbt.scala
index b97ad44..8cba9df 100644
--- a/stage1/cbt.scala
+++ b/stage1/cbt.scala
@@ -62,6 +62,7 @@ object `package`{
file.delete
}
+ def listOrFail: Seq[File] = Option( file.listFiles ).getOrElse( throw new Exception( "no such file: " + file ) ).toVector
def listRecursive: Seq[File] = {
file +: (
if( file.isDirectory ) file.listFiles.flatMap(_.listRecursive).toVector else Seq[File]()
diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala
index 37b1786..fcda629 100644
--- a/stage2/BasicBuild.scala
+++ b/stage2/BasicBuild.scala
@@ -32,10 +32,10 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep
def projectDirectory: File = lib.realpath(context.workingDirectory)
assert( projectDirectory.exists, "projectDirectory does not exist: " ++ projectDirectory.string )
assert(
- projectDirectory.getName =!= lib.buildDirectoryName ||
- {
+ projectDirectory.getName =!= lib.buildDirectoryName
+ || {
def transitiveInterfaces(cls: Class[_]): Vector[Class[_]] = cls.getInterfaces.toVector.flatMap(i => i +: transitiveInterfaces(i))
- transitiveInterfaces(this.getClass).contains(classOf[BuildBuildWithoutEssentials])
+ transitiveInterfaces(this.getClass).contains(classOf[BuildBuild])
},
s"You need to extend ${lib.buildBuildClassName} in: " + projectDirectory + "/" ++ lib.buildDirectoryName
)
@@ -96,7 +96,7 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep
def sources: Seq[File] = (
Seq(defaultSourceDirectory)
++ generatedSources
- ++ projectDirectory.listFiles.toVector.filter(sourceFileFilter)
+ ++ projectDirectory.listOrFail.toVector.filter(sourceFileFilter)
)
/** Which file endings to consider being source files. */
@@ -130,7 +130,7 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep
def localJars: Seq[File] =
Seq(projectDirectory ++ "/lib")
.filter(_.exists)
- .flatMap(_.listFiles)
+ .flatMap(_.listOrFail)
.filter(_.toString.endsWith(".jar"))
override def dependencyClasspath : ClassPath = super.dependencyClasspath
diff --git a/stage2/BuildBuild.scala b/stage2/BuildBuild.scala
index 9b48e15..dea0f12 100644
--- a/stage2/BuildBuild.scala
+++ b/stage2/BuildBuild.scala
@@ -3,19 +3,13 @@ import java.nio.file._
import java.io.File
class ConcreteBuildBuild(val context: Context) extends BuildBuild
-class ConcreteBuildBuildWithoutEssentials(val context: Context) extends BuildBuildWithoutEssentials
-trait BuildBuild extends BuildBuildWithoutEssentials{
- override def dependencies =
- super.dependencies :+ plugins.essentials
-}
class plugins(implicit context: Context){
// TODO: move this out of the OO
- private def plugin(dir: String) = DirectoryDependency(
+ private def plugin(dir: String) = cbt.DirectoryDependency(
context.copy(
workingDirectory = context.cbtHome / "plugins" / dir
)
)
- final lazy val essentials = plugin( "essentials" )
final lazy val googleJavaFormat = plugin( "google-java-format" )
final lazy val proguard = plugin( "proguard" )
final lazy val sbtLayout = plugin( "sbt_layout" )
@@ -28,7 +22,8 @@ class plugins(implicit context: Context){
final lazy val wartremover = plugin( "wartremover" )
final lazy val scalafix = plugin( "scalafix" )
}
-trait BuildBuildWithoutEssentials extends BaseBuild{
+
+trait BuildBuild extends BaseBuild{
object plugins extends plugins
assert(
@@ -45,7 +40,7 @@ trait BuildBuildWithoutEssentials extends BaseBuild{
super.dependencies :+ context.cbtDependency
def managedBuildDirectory: java.io.File = lib.realpath( projectDirectory.parent )
- def managedBuild = taskCache[BuildBuildWithoutEssentials]("managedBuild").memoize{
+ def managedBuild = taskCache[BuildBuild]("managedBuild").memoize{
val managedBuildFile = projectDirectory++("/"++lib.buildFileName)
logger.composition("Loading build at " ++ managedBuildDirectory.toString)
val build = (
diff --git a/stage2/Lib.scala b/stage2/Lib.scala
index 948cbf0..04e68f1 100644
--- a/stage2/Lib.scala
+++ b/stage2/Lib.scala
@@ -38,17 +38,8 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){
val useBasicBuild = directory == start && start.getName != buildDirectoryName
try{
- if(useBasicBuild) {
+ if(useBasicBuild)
new BasicBuild( context.copy( workingDirectory = directory ) )
- } else if(
- // essentials depends on eval, which has a build that depends on scalatest
- // this means in these we can't depend on essentials
- // hopefully we find a better way that this pretty hacky exclusion rule
- directory == (context.cbtHome ++ "/plugins/essentials")
- || directory == (context.cbtHome ++ "/libraries/eval")
- || directory == (context.cbtHome ++ "/plugins/scalatest")
- )
- new cbt.ConcreteBuildBuildWithoutEssentials( context.copy( workingDirectory = start ) )
else
new cbt.ConcreteBuildBuild( context.copy( workingDirectory = start ) )
} catch {
@@ -211,7 +202,7 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){
def depthFirstFileStream(file: File): Vector[File] = {
(
if (file.isDirectory) {
- file.listFiles.toVector.flatMap(depthFirstFileStream(_))
+ file.listOrFail.toVector.flatMap(depthFirstFileStream(_))
} else Vector()
) :+ file
}
diff --git a/stage2/Plugin.scala b/stage2/Plugin.scala
index ed4a698..43e26fa 100644
--- a/stage2/Plugin.scala
+++ b/stage2/Plugin.scala
@@ -1,7 +1,5 @@
package cbt
trait Plugin extends BaseBuild{
+ override def dependencies = super.dependencies :+ context.cbtDependency
object plugins extends plugins
-
- override def dependencies =
- super.dependencies :+ context.cbtDependency :+ plugins.essentials
}
diff --git a/plugins/essentials/CommandLineOverrides.scala b/stage2/plugins/CommandLineOverrides.scala
index 3ffaf21..3ffaf21 100644
--- a/plugins/essentials/CommandLineOverrides.scala
+++ b/stage2/plugins/CommandLineOverrides.scala
diff --git a/plugins/essentials/DynamicOverrides.scala b/stage2/plugins/DynamicOverrides.scala
index 8d67be7..8d67be7 100644
--- a/plugins/essentials/DynamicOverrides.scala
+++ b/stage2/plugins/DynamicOverrides.scala
diff --git a/plugins/essentials/MultipleScalaVersions.scala b/stage2/plugins/MultipleScalaVersions.scala
index 5d896dd..5d896dd 100644
--- a/plugins/essentials/MultipleScalaVersions.scala
+++ b/stage2/plugins/MultipleScalaVersions.scala
diff --git a/plugins/essentials/Readme.md b/stage2/plugins/Readme.md
index 76d3756..76d3756 100644
--- a/plugins/essentials/Readme.md
+++ b/stage2/plugins/Readme.md
diff --git a/plugins/essentials/SnapshotVersion.scala b/stage2/plugins/SnapshotVersion.scala
index 1f7eb23..1f7eb23 100644
--- a/plugins/essentials/SnapshotVersion.scala
+++ b/stage2/plugins/SnapshotVersion.scala