/src/main/scala/com/twitter/sbt/PimpedVersion.scala

http://github.com/twitter/standard-project · Scala · 29 lines · 21 code · 7 blank · 1 comment · 2 complexity · 834d861cbacbc2eaccc013ae0741e2d4 MD5 · raw file

  1. package com.twitter.sbt
  2. import _root_.sbt.{Version, BasicVersion}
  3. object pimpedversion {
  4. class PimpedVersion(wrapped: BasicVersion) {
  5. private def increment(i: Option[Int]) = Some(i.getOrElse(0) + 1)
  6. // these methods do the wrong thing in BasicVersion. :(
  7. def incMicro() = BasicVersion(wrapped.major, wrapped.minor.orElse(Some(0)), increment(wrapped.micro), wrapped.extra)
  8. def incMinor() = BasicVersion(wrapped.major, increment(wrapped.minor), wrapped.micro.map { _ => 0 }, wrapped.extra)
  9. def incMajor() = BasicVersion(wrapped.major + 1, wrapped.minor.map { _ => 0 }, wrapped.micro.map { _ => 0 }, wrapped.extra)
  10. def stripSnapshot() = {
  11. val stripped = wrapped.extra.map(_.replaceAll("""-?SNAPSHOT""", "")).flatMap { s =>
  12. if ( s.length > 0 ) Some(s) else None
  13. }
  14. BasicVersion(wrapped.major, wrapped.minor, wrapped.micro, stripped)
  15. }
  16. def addSnapshot() = {
  17. val unstripped = stripSnapshot().extra.map( _ + "-SNAPSHOT").orElse(Some("SNAPSHOT"))
  18. BasicVersion(wrapped.major, wrapped.minor, wrapped.micro, unstripped)
  19. }
  20. }
  21. implicit def pimpVersion(wrapped: Version) = new PimpedVersion(wrapped.asInstanceOf[BasicVersion])
  22. }