Support zero padded version updates
This commit is contained in:
Greg Wilkins 2016-04-28 14:30:20 +10:00
parent 5f7a32e30e
commit a377b3a8f3
2 changed files with 48 additions and 36 deletions

View File

@ -25,6 +25,17 @@ package org.eclipse.jetty.start;
*/
public class Version implements Comparable<Version>
{
/**
* Original String version
*/
private String string = null;
/**
* Short String version
*/
private String shortString = null;
/**
* The major version for java is always "1" (per
* <a href="http://www.oracle.com/technetwork/java/javase/namechange-140185.html">legacy versioning history</a>)
@ -45,6 +56,12 @@ public class Version implements Comparable<Version>
* The update (where bug fixes are placed)
*/
private int update = -1;
/**
* Update strings may be zero padded!
*/
private String updateString = null;
/**
* Extra versioning information present on the version string, but not relevant for version comparison reason.
* (eg: with "1.8.0_45-internal", the suffix would be "-internal")
@ -181,6 +198,7 @@ public class Version implements Comparable<Version>
*/
private void parse(String versionStr)
{
string = versionStr;
legacyMajor = 0;
major = -1;
revision = -1;
@ -194,6 +212,8 @@ public class Version implements Comparable<Version>
while (offset < len)
{
char c = versionStr.charAt(offset);
if (c=='-')
shortString=versionStr.substring(0,offset);
boolean isSeparator = !Character.isLetterOrDigit(c);
if (isSeparator)
{
@ -206,7 +226,7 @@ public class Version implements Comparable<Version>
else if (Character.isLetter(c))
{
suffix = versionStr.substring(offset);
return;
break;
}
switch (state)
@ -231,12 +251,16 @@ public class Version implements Comparable<Version>
break;
case UPDATE:
if (!isSeparator)
{
update = val;
}
break;
}
offset++;
}
if (shortString==null)
shortString=versionStr;
}
/**
@ -245,25 +269,7 @@ public class Version implements Comparable<Version>
@Override
public String toString()
{
StringBuffer sb = new StringBuffer(10);
sb.append(legacyMajor);
if (major >= 0)
{
sb.append('.').append(major);
if (revision >= 0)
{
sb.append('.').append(revision);
if (update >= 0)
{
sb.append('_').append(update);
}
}
}
if (Utils.isNotBlank(suffix))
{
sb.append('-').append(suffix);
}
return sb.toString();
return string;
}
/**
@ -272,20 +278,6 @@ public class Version implements Comparable<Version>
*/
public String toShortString()
{
StringBuffer sb = new StringBuffer(10);
sb.append(legacyMajor);
if (major >= 0)
{
sb.append('.').append(major);
if (revision >= 0)
{
sb.append('.').append(revision);
if (update >= 0)
{
sb.append('_').append(update);
}
}
}
return sb.toString();
return shortString;
}
}

View File

@ -49,6 +49,8 @@ public class VersionTest
{
assertToShortString("1.8","1.8");
assertToShortString("1.8.0","1.8.0");
assertToShortString("1.8.0_3","1.8.0_3");
assertToShortString("1.8.0_03","1.8.0_03");
assertToShortString("1.8.0_45","1.8.0_45");
assertToShortString("1.8.0_45-internal","1.8.0_45");
assertToShortString("1.8.0-debug","1.8.0");
@ -60,6 +62,22 @@ public class VersionTest
assertThat("Version [" + verStr + "].toShortString", ver.toShortString(), is(expectedShortString));
}
@Test
public void testToString()
{
assertToString("1.8");
assertToString("1.8.0");
assertToString("1.8.0_0");
assertToString("1.8.0_3");
assertToString("1.8.0_03");
}
private void assertToString(String verStr)
{
Version ver = new Version(verStr);
assertThat("Version [" + verStr + "].toString", ver.toString(), is(verStr));
}
@Test
public void testNewerVersion() {
assertIsNewer("0.0.0", "0.0.1");
@ -104,4 +122,6 @@ public class VersionTest
Version vtest = new Version(testver);
assertTrue("Version [" + testver + "] should be newer than [" + basever + "]", vtest.isNewerThan(vbase));
}
}