From 7780a3667f5f9977215eba80e483d90cbdcfbb94 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 5 Dec 2011 10:12:44 -0500 Subject: Step one towards using project revision to build --- project/Layers.scala | 6 ++++-- project/Release.scala | 29 ++++++++++++++++++----------- project/plugins.sbt | 7 +++++++ project/plugins/build.sbt | 2 -- project/plugins/project/Build.scala | 7 ------- project/project/Build.scala | 7 +++++++ 6 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 project/plugins.sbt delete mode 100644 project/plugins/build.sbt delete mode 100644 project/plugins/project/Build.scala create mode 100644 project/project/Build.scala (limited to 'project') diff --git a/project/Layers.scala b/project/Layers.scala index cdd68554ed..84c926f072 100644 --- a/project/Layers.scala +++ b/project/Layers.scala @@ -1,5 +1,7 @@ import sbt._ import Keys._ +import com.jsuereth.git.GitKeys.gitRunner + /** This trait stores all the helper methods to generate layers in Scala's layered build. */ trait Layers extends Build { // TODO - Clean this up or use a self-type. @@ -57,7 +59,7 @@ trait Layers extends Build { // TODO - Allow other scalac option settings. scalacOptions in Compile <++= (scalaSource in Compile) map (src => Seq("-sourcepath", src.getAbsolutePath)), classpathOptions := ClasspathOptions.manual, - resourceGenerators in Compile <+= (baseDirectory, version, resourceManaged) map Release.generatePropertiesFile("library.properties"), + resourceGenerators in Compile <+= (baseDirectory, version, resourceManaged, gitRunner) map Release.generatePropertiesFile("library.properties"), referenceScala )) :_*) @@ -67,7 +69,7 @@ trait Layers extends Build { scalaSource in Compile <<= (baseDirectory) apply (_ / "src" / "compiler"), resourceDirectory in Compile <<= baseDirectory apply (_ / "src" / "compiler"), defaultExcludes in unmanagedResources := "*.scala", - resourceGenerators in Compile <+= (baseDirectory, version, resourceManaged) map Release.generatePropertiesFile("compiler.properties"), + resourceGenerators in Compile <+= (baseDirectory, version, resourceManaged, gitRunner) map Release.generatePropertiesFile("compiler.properties"), // Note, we might be able to use the default task, but for some reason ant was filtering files out. Not sure what's up, but we'll // stick with that for now. unmanagedResources in Compile <<= (baseDirectory) map { diff --git a/project/Release.scala b/project/Release.scala index ff1bdfbd31..a8dc14988e 100644 --- a/project/Release.scala +++ b/project/Release.scala @@ -1,5 +1,6 @@ import sbt._ import Keys._ +import _root_.com.jsuereth.git.GitRunner object Release { @@ -65,15 +66,11 @@ object Release { /** This generates a properties file, if it does not already exist, with the maximum lastmodified timestamp * of any source file. */ - def generatePropertiesFile(name: String)(baseDirectory: File, version: String, dir: File): Seq[File] = { + def generatePropertiesFile(name: String)(baseDirectory: File, version: String, dir: File, git: GitRunner): Seq[File] = { val target = dir / name // TODO - Regenerate on triggers, like recompilation or something... - // TODO - also think about pulling git last-commit for this... if (!target.exists) { - val ts = getLastModified(baseDirectory) - val formatter = new java.text.SimpleDateFormat("yyyyMMdd'T'HHmmss") - formatter.setTimeZone(java.util.TimeZone.getTimeZone("GMT")) - val fullVersion = version + "." + formatter.format(new java.util.Date(ts)) + val fullVersion = makeFullVersionString(baseDirectory, version, git) makePropertiesFile(target, fullVersion) } target :: Nil @@ -83,12 +80,22 @@ object Release { def makePropertiesFile(f: File, version: String): Unit = IO.write(f, "version.number = "+version+"\ncopyright.string = Copyright 2002-2011, LAMP/EPFL") - def makeFullVersionString(baseDirectory: File, baseVersion: String) = baseVersion+"."+getLastModified(baseDirectory) + def makeFullVersionString(baseDirectory: File, baseVersion: String, git: GitRunner) = baseVersion+"."+getGitRevision(baseDirectory, git)+"."+currentDay - // TODO - Something that doesn't take so long... - def allSourceFiles(baseDirectory: File) = (baseDirectory / "src") ** ("*.scala" | "*.java" ) + // TODO - do we want this in the build number? + def currentDay = (new java.text.SimpleDateFormat("yyyyMMdd'T'HHmmss")) format (new java.util.Date) - def getLastModified(baseDirectory: File) = - allSourceFiles(baseDirectory).get.map(_.lastModified).max + def getGitRevision(baseDirectory: File, git: GitRunner) = { + object outputStealer extends sbt.Logger { + private val stdout = new StringBuilder + private val stderr = new StringBuilder + def log (level: Level.Value, message: ⇒ String): Unit = stdout append message + def success (message: ⇒ String): Unit = () + def trace (t: ⇒ Throwable): Unit = () + def stdoutString = stdout.toString + } + git("describe", "HEAD", "--abbrev=7", "--match", "dev")(baseDirectory, outputStealer) + outputStealer.stdoutString + } } diff --git a/project/plugins.sbt b/project/plugins.sbt new file mode 100644 index 0000000000..2dfee4b5c9 --- /dev/null +++ b/project/plugins.sbt @@ -0,0 +1,7 @@ +resolvers += Resolver.url("Typesafe nightlies", url("https://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/"))(Resolver.ivyStylePatterns) + +resolvers += Resolver.url("scalasbt", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns) + +resolvers += "jgit-repo" at "http://download.eclipse.org/jgit/maven" + + diff --git a/project/plugins/build.sbt b/project/plugins/build.sbt deleted file mode 100644 index 71bf3b9379..0000000000 --- a/project/plugins/build.sbt +++ /dev/null @@ -1,2 +0,0 @@ -resolvers += Resolver.url("Typesafe nightlies", url("https://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/"))(Resolver.ivyStylePatterns) - diff --git a/project/plugins/project/Build.scala b/project/plugins/project/Build.scala deleted file mode 100644 index f382cf7015..0000000000 --- a/project/plugins/project/Build.scala +++ /dev/null @@ -1,7 +0,0 @@ -import sbt._ -object PluginDef extends Build { - override def projects = Seq(root) - lazy val root = Project("plugins", file(".")) dependsOn(proguard) - lazy val proguard = uri("git://github.com/jsuereth/xsbt-proguard-plugin.git") - //lazy val proguard = uri("git://github.com/siasia/xsbt-proguard-plugin.git") -} diff --git a/project/project/Build.scala b/project/project/Build.scala new file mode 100644 index 0000000000..97a1787e0d --- /dev/null +++ b/project/project/Build.scala @@ -0,0 +1,7 @@ +import sbt._ +object PluginDef extends Build { + override def projects = Seq(root) + lazy val root = Project("plugins", file(".")) dependsOn(proguard, git) + lazy val proguard = uri("git://github.com/jsuereth/xsbt-proguard-plugin.git") + lazy val git = uri("git://github.com/sbt/sbt-git-plugin.git") +} -- cgit v1.2.3