|
@@ -27,6 +27,7 @@ import org.elasticsearch.test.rest.yaml.Features;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -98,33 +99,30 @@ public class SkipSection {
|
|
|
|
|
|
public static final SkipSection EMPTY = new SkipSection();
|
|
|
|
|
|
- private final Version lowerVersion;
|
|
|
- private final Version upperVersion;
|
|
|
+ private final List<VersionRange> versionRanges;
|
|
|
private final List<String> features;
|
|
|
private final String reason;
|
|
|
|
|
|
private SkipSection() {
|
|
|
- this.lowerVersion = null;
|
|
|
- this.upperVersion = null;
|
|
|
+ this.versionRanges = new ArrayList<>();
|
|
|
this.features = new ArrayList<>();
|
|
|
this.reason = null;
|
|
|
}
|
|
|
|
|
|
public SkipSection(String versionRange, List<String> features, String reason) {
|
|
|
assert features != null;
|
|
|
- Version[] versions = parseVersionRange(versionRange);
|
|
|
- this.lowerVersion = versions[0];
|
|
|
- this.upperVersion = versions[1];
|
|
|
+ this.versionRanges = parseVersionRanges(versionRange);
|
|
|
+ assert versionRanges.isEmpty() == false;
|
|
|
this.features = features;
|
|
|
this.reason = reason;
|
|
|
}
|
|
|
|
|
|
public Version getLowerVersion() {
|
|
|
- return lowerVersion;
|
|
|
+ return versionRanges.get(0).getLower();
|
|
|
}
|
|
|
|
|
|
public Version getUpperVersion() {
|
|
|
- return upperVersion;
|
|
|
+ return versionRanges.get(versionRanges.size() - 1).getUpper();
|
|
|
}
|
|
|
|
|
|
public List<String> getFeatures() {
|
|
@@ -139,10 +137,8 @@ public class SkipSection {
|
|
|
if (isEmpty()) {
|
|
|
return false;
|
|
|
}
|
|
|
- boolean skip = lowerVersion != null && upperVersion != null && currentVersion.onOrAfter(lowerVersion)
|
|
|
- && currentVersion.onOrBefore(upperVersion);
|
|
|
- skip |= Features.areAllSupported(features) == false;
|
|
|
- return skip;
|
|
|
+ boolean skip = versionRanges.stream().anyMatch(range -> range.contains(currentVersion));
|
|
|
+ return skip || Features.areAllSupported(features) == false;
|
|
|
}
|
|
|
|
|
|
public boolean isVersionCheck() {
|
|
@@ -153,24 +149,30 @@ public class SkipSection {
|
|
|
return EMPTY.equals(this);
|
|
|
}
|
|
|
|
|
|
- static Version[] parseVersionRange(String versionRange) {
|
|
|
- if (versionRange == null) {
|
|
|
- return new Version[] { null, null };
|
|
|
+ static List<VersionRange> parseVersionRanges(String rawRanges) {
|
|
|
+ if (rawRanges == null) {
|
|
|
+ return Collections.singletonList(new VersionRange(null, null));
|
|
|
}
|
|
|
- if (versionRange.trim().equals("all")) {
|
|
|
- return new Version[]{VersionUtils.getFirstVersion(), Version.CURRENT};
|
|
|
- }
|
|
|
- String[] skipVersions = versionRange.split("-");
|
|
|
- if (skipVersions.length > 2) {
|
|
|
- throw new IllegalArgumentException("version range malformed: " + versionRange);
|
|
|
+ if (rawRanges.trim().equals("all")) {
|
|
|
+ return Collections.singletonList(new VersionRange(VersionUtils.getFirstVersion(), Version.CURRENT));
|
|
|
}
|
|
|
+ String[] ranges = rawRanges.split(",");
|
|
|
+ List<VersionRange> versionRanges = new ArrayList<>();
|
|
|
+ for (String rawRange : ranges) {
|
|
|
+ String[] skipVersions = rawRange.split("-", -1);
|
|
|
+ if (skipVersions.length > 2) {
|
|
|
+ throw new IllegalArgumentException("version range malformed: " + rawRanges);
|
|
|
+ }
|
|
|
|
|
|
- String lower = skipVersions[0].trim();
|
|
|
- String upper = skipVersions[1].trim();
|
|
|
- return new Version[] {
|
|
|
- lower.isEmpty() ? VersionUtils.getFirstVersion() : Version.fromString(lower),
|
|
|
- upper.isEmpty() ? Version.CURRENT : Version.fromString(upper)
|
|
|
- };
|
|
|
+ String lower = skipVersions[0].trim();
|
|
|
+ String upper = skipVersions[1].trim();
|
|
|
+ VersionRange versionRange = new VersionRange(
|
|
|
+ lower.isEmpty() ? VersionUtils.getFirstVersion() : Version.fromString(lower),
|
|
|
+ upper.isEmpty() ? Version.CURRENT : Version.fromString(upper)
|
|
|
+ );
|
|
|
+ versionRanges.add(versionRange);
|
|
|
+ }
|
|
|
+ return versionRanges;
|
|
|
}
|
|
|
|
|
|
public String getSkipMessage(String description) {
|