From 994fe17fb0e894d56925d88368f712e268a47c64 Mon Sep 17 00:00:00 2001 From: Alpar Torok Date: Wed, 6 Mar 2019 15:55:50 +0200 Subject: [PATCH] Forward port bwc version fix from 7.x While working on a backport I realized that #38593 was merged in `7.x` and missing in master. We need this or it will cause trouble again when we bump majors next time. --- .../gradle/VersionCollection.java | 24 +++++++++++++++++-- .../gradle/VersionCollectionTests.java | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/VersionCollection.java b/buildSrc/src/main/java/org/elasticsearch/gradle/VersionCollection.java index dc981a2694e4e..703a38fca48e7 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/VersionCollection.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/VersionCollection.java @@ -223,7 +223,12 @@ private String getBranchFor(Version version) { case ":distribution": return "master"; case ":distribution:bwc:minor": - return version.getMajor() + ".x"; + final Version latestInMajor = getLatestVersionByKey(groupByMajor, version.getMajor()); + if (latestInMajor.getMinor() == version.getMinor()) { + return version.getMajor() + ".x"; + } else { + return version.getMajor() + "." + version.getMinor(); + } case ":distribution:bwc:staged": case ":distribution:bwc:maintenance": case ":distribution:bwc:bugfix": @@ -239,7 +244,15 @@ public List getUnreleased() { unreleased.add(currentVersion); // the tip of the previous major is unreleased for sure, be it a minor or a bugfix - unreleased.add(getLatestVersionByKey(this.groupByMajor, currentVersion.getMajor() - 1)); + final Version latestOfPreviousMajor = getLatestVersionByKey(this.groupByMajor, currentVersion.getMajor() - 1); + unreleased.add(latestOfPreviousMajor); + if (latestOfPreviousMajor.getRevision() == 0) { + // if the previous major is a x.y.0 release, then the tip of the minor before that (y-1) is also unreleased + final Version previousMinor = getLatestInMinor(latestOfPreviousMajor.getMajor(), latestOfPreviousMajor.getMinor() - 1); + if (previousMinor != null) { + unreleased.add(previousMinor); + } + } final Map> groupByMinor = getReleasedMajorGroupedByMinor(); int greatestMinor = groupByMinor.keySet().stream().max(Integer::compareTo).orElse(0); @@ -267,6 +280,13 @@ public List getUnreleased() { ); } + private Version getLatestInMinor(int major, int minor) { + return groupByMajor.get(major).stream() + .filter(v -> v.getMinor() == minor) + .max(Version::compareTo) + .orElse(null); + } + private Version getLatestVersionByKey(Map> groupByMajor, int key) { return groupByMajor.getOrDefault(key, emptyList()).stream() .max(Version::compareTo) diff --git a/buildSrc/src/test/java/org/elasticsearch/gradle/VersionCollectionTests.java b/buildSrc/src/test/java/org/elasticsearch/gradle/VersionCollectionTests.java index 03e08cb3ffe45..fa0e261e4c8cb 100644 --- a/buildSrc/src/test/java/org/elasticsearch/gradle/VersionCollectionTests.java +++ b/buildSrc/src/test/java/org/elasticsearch/gradle/VersionCollectionTests.java @@ -298,7 +298,7 @@ public void testGetBranch() { getVersionCollection("6.4.2") ); assertUnreleasedBranchNames( - asList("5.6", "6.4", "6.x"), + asList("5.6", "6.4", "6.5"), getVersionCollection("6.6.0") ); assertUnreleasedBranchNames( @@ -329,7 +329,7 @@ public void testGetGradleProjectPath() { getVersionCollection("8.0.0") ); assertUnreleasedGradleProjectPaths( - asList(":distribution:bwc:staged", ":distribution:bwc:minor"), + asList(":distribution:bwc:maintenance", ":distribution:bwc:staged", ":distribution:bwc:minor"), getVersionCollection("7.1.0") ); }