mirror of https://github.com/halo-dev/halo
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 testpull/1041/head
parent
a318abcdc2
commit
60ad4dad80
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue