Fix an error about version comparision in development environment (#1039)

* Let unknown version as maximum version

* Fix VersionUtilTest error

* Remove deprecated version comparision method and related test
pull/1041/head
John Niang 2020-08-23 17:47:52 +08:00 committed by GitHub
parent a318abcdc2
commit 60ad4dad80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 93 deletions

View File

@ -47,6 +47,11 @@ public class Version implements Comparable<Version> {
*/
private static final Version EMPTY_VERSION = new Version(0, 0, 0);
/**
* Maximum version.
*/
private static final Version MAXIMUM_VERSION = new Version(Long.MAX_VALUE, Long.MAX_VALUE, Long.MAX_VALUE);
/**
* Major number.
*/
@ -128,7 +133,7 @@ public class Version implements Comparable<Version> {
}
// handle unknown version
if (StringUtils.equalsIgnoreCase(version, HaloConst.UNKNOWN_VERSION)) {
return Optional.of(new Version());
return Optional.of(MAXIMUM_VERSION);
}
// get matcher for version
Matcher matcher = PATTERN.matcher(version);

View File

@ -1,11 +1,6 @@
package run.halo.app.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
import run.halo.app.model.support.HaloConst;
import java.util.Objects;
import java.util.StringTokenizer;
/**
* Version utility.
@ -16,85 +11,11 @@ import java.util.StringTokenizer;
* @date 2020-08-03
*/
@Slf4j
public class VersionUtil {
private static final String UNDERLINE = "_";
public final class VersionUtil {
private VersionUtil() {
}
@Deprecated
public static int[] getCanonicalVersion(String version) {
Assert.hasText(version, "Version must not be blank");
if (Objects.equals(version, HaloConst.UNKNOWN_VERSION)) {
log.warn("Unknown version will be converted to {}.{}.{}.{}",
Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MAX_VALUE);
return new int[] {Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MAX_VALUE,
Integer.MAX_VALUE};
}
int[] canonicalVersion = new int[] {1, 1, 0, 0};
StringTokenizer tokenizer = new StringTokenizer(version, ".");
String token = tokenizer.nextToken();
canonicalVersion[0] = Integer.parseInt(token);
token = tokenizer.nextToken();
StringTokenizer subTokenizer;
if (!token.contains(UNDERLINE)) {
canonicalVersion[1] = Integer.parseInt(token);
} else {
subTokenizer = new StringTokenizer(token, UNDERLINE);
canonicalVersion[1] = Integer.parseInt(subTokenizer.nextToken());
canonicalVersion[3] = Integer.parseInt(subTokenizer.nextToken());
}
if (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if (!token.contains(UNDERLINE)) {
canonicalVersion[2] = Integer.parseInt(token);
if (tokenizer.hasMoreTokens()) {
canonicalVersion[3] = Integer.parseInt(tokenizer.nextToken());
}
} else {
subTokenizer = new StringTokenizer(token, UNDERLINE);
canonicalVersion[2] = Integer.parseInt(subTokenizer.nextToken());
canonicalVersion[3] = Integer.parseInt(subTokenizer.nextToken());
}
}
return canonicalVersion;
}
@Deprecated
public static int compare(String version1, String version2) {
log.debug("Comparing version [{}] with [{}]", version1, version2);
int[] canonicalVersion1 = getCanonicalVersion(version1);
int[] canonicalVersion2 = getCanonicalVersion(version2);
if (canonicalVersion1[0] < canonicalVersion2[0]) {
return -1;
} else if (canonicalVersion1[0] > canonicalVersion2[0]) {
return 1;
} else if (canonicalVersion1[1] < canonicalVersion2[1]) {
return -1;
} else if (canonicalVersion1[1] > canonicalVersion2[1]) {
return 1;
} else if (canonicalVersion1[2] < canonicalVersion2[2]) {
return -1;
} else if (canonicalVersion1[2] > canonicalVersion2[2]) {
return 1;
} else if (canonicalVersion1[3] < canonicalVersion2[3]) {
return -1;
} else {
return canonicalVersion1[3] > canonicalVersion2[3] ? 1 : 0;
}
}
/**
* Compare version.
*

View File

@ -4,7 +4,8 @@ import org.apache.commons.lang3.RandomStringUtils;
import org.junit.jupiter.api.Test;
import run.halo.app.model.support.HaloConst;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author ryanwang
@ -29,17 +30,7 @@ class VersionUtilTest {
RandomStringUtils.randomNumeric(1),
RandomStringUtils.randomNumeric(2),
RandomStringUtils.randomNumeric(3));
assertFalse(VersionUtil.compareVersion(HaloConst.UNKNOWN_VERSION, randomVersion));
assertTrue(VersionUtil.compareVersion(HaloConst.UNKNOWN_VERSION, randomVersion));
}
@Test
void unknownOrEmptyCanonicalVersionTest() {
assertThrows(IllegalArgumentException.class, () -> VersionUtil.getCanonicalVersion(null));
int[] version = VersionUtil.getCanonicalVersion(HaloConst.UNKNOWN_VERSION);
assertNotNull(version);
assertEquals(4, version.length);
for (int v : version) {
assertEquals(Integer.MAX_VALUE, v);
}
}
}