sbt/project/StatusPlugin.scala

52 lines
1.6 KiB
Scala

import sbt._
import Keys._
object StatusPlugin extends AutoPlugin {
override def requires = plugins.JvmPlugin
override def trigger = allRequirements
object autoImport {
lazy val publishStatus = settingKey[String]("possible values are snapshots or releases.")
}
import autoImport._
override def buildSettings: Seq[Setting[_]] = Seq(
isSnapshot := {
val SnapshotQualifier = """(.+)(-.*SNAPSHOT)(.*)""".r
val v = version.value
v match {
case SnapshotQualifier(_, _, _) => true
case _ => false
}
},
publishStatus := {
if (isSnapshot.value) "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.appendWithSession(
(version in ThisBuild ~= stamp) ::
(publishStatus in ThisBuild := status) ::
Nil,
state
)
}
def stamp(v: String): String = {
val Snapshot = "-SNAPSHOT"
if (v endsWith Snapshot)
(v stripSuffix Snapshot) + "-" + timestampString(System.currentTimeMillis)
else sys.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))
}
}