sbt/project/StatusPlugin.scala

46 lines
1.6 KiB
Scala
Raw Permalink Normal View History

2014-05-01 18:50:07 +02:00
import sbt._
import Keys._
import java.util.regex.Pattern
2011-06-26 18:27:07 +02:00
object StatusPlugin extends AutoPlugin {
override def requires = plugins.JvmPlugin
override def trigger = allRequirements
2011-06-26 18:27:07 +02:00
object autoImport {
lazy val publishStatus = SettingKey[String]("publish-status")
}
import autoImport._
override def buildSettings: Seq[Setting[_]] = Seq(
2014-05-01 18:50:07 +02:00
isSnapshot <<= version(v => v.contains("-") && snapshotQualifier(v)),
publishStatus <<= isSnapshot { snap => if (snap) "snapshots" else "releases" },
commands += stampVersion
)
def stampVersion = Command.command("stamp-version") { state =>
val extracted = Project.extract(state)
val status = extracted.get(publishStatus)
// Set new version AND lock down the publishStatus to what it was, as
// our release regexes no longer support ivy data format, due to other issues.
extracted.append(
(version in ThisBuild ~= stamp) ::
(publishStatus in ThisBuild := status) ::
Nil,
state)
2014-05-01 18:50:07 +02:00
}
def stamp(v: String): String =
if (v endsWith Snapshot)
(v stripSuffix Snapshot) + "-" + timestampString(System.currentTimeMillis)
else
error("Release version '" + v + "' cannot be stamped")
def timestampString(time: Long): String =
{
val format = new java.text.SimpleDateFormat("yyyyMMdd-HHmmss")
format.format(new java.util.Date(time))
}
final val Snapshot = "-SNAPSHOT"
// NOte: This moved into sbt itself... But we need to add semantic knowledge of how
// we stamp our nightlies.
def snapshotQualifier(v: String) = Pattern.matches(""".+-.*SNAPSHOT.*""", v)
}