Fix #1136 - Ivy's `+` dependencies not converted to maven style syntax.

* Attempt to convert dependencies that end in `+` into maven-style version range
* if a failure occurs, just use the original version (could be bad...).
This commit is contained in:
Josh Suereth 2014-03-03 12:10:37 -05:00
parent 71c9ec0e55
commit 8cd44646b7
2 changed files with 21 additions and 2 deletions

View File

@ -188,7 +188,7 @@ class MakePom(val log: Logger)
<dependency>
<groupId>{mrid.getOrganisation}</groupId>
<artifactId>{mrid.getName}</artifactId>
<version>{mrid.getRevision}</version>
<version>{makeDependencyVersion(mrid.getRevision)}</version>
{ scopeElem(scope) }
{ optionalElem(optional) }
{ classifierElem(classifier) }
@ -197,6 +197,25 @@ class MakePom(val log: Logger)
</dependency>
}
def makeDependencyVersion(revision: String): String = {
if(revision endsWith "+") try {
// TODO - this is the slowest possible implementation.
val beforePlus = revision.reverse.dropWhile(_ != '.').drop(1).reverse
val lastVersion = beforePlus.reverse.takeWhile(_ != '.').reverse
val lastVersionInt = lastVersion.toInt
val prefixVersion = beforePlus.reverse.dropWhile(_ != '.').drop(1).reverse
s"[$beforePlus, ${prefixVersion}.${lastVersionInt+1})"
} catch {
case e: NumberFormatException =>
// TODO - if the version deosn't meet our expectations, maybe we just issue a hard
// error instead of softly ignoring the attempt to rewrite.
//sys.error(s"Could not fix version [$revision] into maven style version")
revision
} else revision
}
@deprecated("No longer used and will be removed.", "0.12.1")
def classifier(dependency: DependencyDescriptor, includeTypes: Set[String]): NodeSeq =
{

View File

@ -40,7 +40,7 @@ object MakePomTest extends Build
for {
dep <- pomXml \ "dependencies" \ "dependency"
if (dep \ "artifactId").text == "jsr305"
if (dep \ "version").text contains "+"
if (dep \ "version").text != "[1.3, 1.4)"
} sys.error(s"Found dependency with invalid maven version: $dep")
()
}