mirror of https://github.com/sbt/sbt.git
Pull in @cunei's suggestion for a more complete Ivy->Maven dynamic revision convertor.
We attempt to convert these constructs to maven: * 1.+ * ]1,2] * [2,3[ * 1+ - Albeit this one is a heuristic for accuracy. This should help ivy users which prefer the nicer 1.2.+ syntax. Also adds tests/improves exisitng tests.
This commit is contained in:
parent
b25fc2bd00
commit
ee28011dfc
|
|
@ -200,20 +200,39 @@ class MakePom(val log: Logger)
|
||||||
|
|
||||||
|
|
||||||
def makeDependencyVersion(revision: String): String = {
|
def makeDependencyVersion(revision: String): String = {
|
||||||
if(revision endsWith "+") try {
|
def plusRange(s:String, shift:Int = 0) = {
|
||||||
// TODO - this is the slowest possible implementation.
|
def pow(i:Int):Int = if (i>0) 10 * pow(i-1) else 1
|
||||||
val beforePlus = revision.reverse.dropWhile(_ != '.').drop(1).reverse
|
val (prefixVersion, lastVersion) = (s+"0"*shift).reverse.split("\\.",2) match {
|
||||||
val lastVersion = beforePlus.reverse.takeWhile(_ != '.').reverse
|
case Array(revLast,revRest) =>
|
||||||
|
( revRest.reverse + ".", revLast.reverse )
|
||||||
|
case Array(revLast) => ("", revLast.reverse)
|
||||||
|
}
|
||||||
val lastVersionInt = lastVersion.toInt
|
val lastVersionInt = lastVersion.toInt
|
||||||
val prefixVersion = beforePlus.reverse.dropWhile(_ != '.').drop(1).reverse
|
s"[${prefixVersion}${lastVersion},${prefixVersion}${lastVersionInt+pow(shift)})"
|
||||||
s"[$beforePlus, ${prefixVersion}.${lastVersionInt+1})"
|
}
|
||||||
|
val startSym=Set(']','[','(')
|
||||||
|
val stopSym=Set(']','[',')')
|
||||||
|
try {
|
||||||
|
if (revision endsWith ".+") {
|
||||||
|
plusRange(revision.substring(0,revision.length-2))
|
||||||
|
} else if (revision endsWith "+") {
|
||||||
|
val base = revision.take(revision.length-1)
|
||||||
|
// This is a heuristic. Maven just doesn't support Ivy's notions of 1+, so
|
||||||
|
// we assume version ranges never go beyond 5 siginificant digits.
|
||||||
|
(0 to 5).map(plusRange(base,_)).mkString(",")
|
||||||
|
} else if (startSym(revision(0)) && stopSym(revision(revision.length-1))) {
|
||||||
|
val start = revision(0)
|
||||||
|
val stop = revision(revision.length-1)
|
||||||
|
val mid = revision.substring(1,revision.length-1)
|
||||||
|
(if (start == ']') "(" else start) + mid + (if (stop == '[') ")" else stop)
|
||||||
|
} else revision
|
||||||
} catch {
|
} catch {
|
||||||
case e: NumberFormatException =>
|
case e: NumberFormatException =>
|
||||||
// TODO - if the version deosn't meet our expectations, maybe we just issue a hard
|
// TODO - if the version doesn't meet our expectations, maybe we just issue a hard
|
||||||
// error instead of softly ignoring the attempt to rewrite.
|
// error instead of softly ignoring the attempt to rewrite.
|
||||||
//sys.error(s"Could not fix version [$revision] into maven style version")
|
//sys.error(s"Could not fix version [$revision] into maven style version")
|
||||||
revision
|
revision
|
||||||
} else revision
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@deprecated("No longer used and will be removed.", "0.12.1")
|
@deprecated("No longer used and will be removed.", "0.12.1")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package sbt
|
||||||
|
|
||||||
|
import java.io.File
|
||||||
|
import org.specs2._
|
||||||
|
import mutable.Specification
|
||||||
|
|
||||||
|
object MakePomTest extends Specification
|
||||||
|
{
|
||||||
|
val mp = new MakePom(ConsoleLogger())
|
||||||
|
import mp.{makeDependencyVersion=>v}
|
||||||
|
"MakePom makeDependencyVersion" should {
|
||||||
|
"Handle .+ in versions" in {
|
||||||
|
v("1.+") must_== "[1,2)"
|
||||||
|
v("1.2.3.4.+") must_== "[1.2.3.4,1.2.3.5)"
|
||||||
|
v("12.31.42.+") must_== "[12.31.42,12.31.43)"
|
||||||
|
}
|
||||||
|
/* TODO - do we care about this case?
|
||||||
|
* 1+ --> [1,2),[10,20),[100,200),[1000,2000),[10000,20000),[100000,200000)
|
||||||
|
*/
|
||||||
|
"Handle ]* bracket in version ranges" in {
|
||||||
|
v("]1,3]") must_== "(1,3]"
|
||||||
|
v("]1.1,1.3]") must_== "(1.1,1.3]"
|
||||||
|
}
|
||||||
|
"Handle *[ bracket in version ranges" in {
|
||||||
|
v("[1,3[") must_== "[1,3)"
|
||||||
|
v("[1.1,1.3[") must_== "[1.1,1.3)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue