diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelVersion.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelVersion.java index b8c1359c53d0ee..13b52434a83a02 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelVersion.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelVersion.java @@ -33,8 +33,8 @@ * * */ @AutoValue @@ -52,9 +52,9 @@ public abstract class BazelVersion { /** Returns the original version string. */ public abstract String getOriginal(); - /** Whether this is a prerelease or a release candidate */ - boolean isPrereleaseOrCandidate() { - return getSuffix().startsWith("-pre") || getSuffix().startsWith("rc"); + /** Whether this is a prerelease */ + boolean isPrerelease() { + return getSuffix().startsWith("-pre"); } /** Parses a version string into a {@link BazelVersion} object. */ @@ -86,7 +86,7 @@ public boolean satisfiesCompatibility(String compatVersion) { int result = Objects.compare( getRelease(), compatSplit, lexicographical(Comparator.naturalOrder())); - if (result == 0 && isPrereleaseOrCandidate()) { + if (result == 0 && isPrerelease()) { result = -1; } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunction.java index a045f4b3acb1ac..2a0ace8e215798 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunction.java @@ -208,12 +208,8 @@ public static void checkBazelCompatibility( if (!curVersion.satisfiesCompatibility(compatVersion)) { String message = String.format( - "Bazel version %s is not compatible with module \"%s@%s\" (bazel_compatibility:" - + " %s)", - curVersion.getOriginal(), - module.getName(), - module.getVersion().getOriginal(), - module.getBazelCompatibility()); + "Bazel version %s is not compatible with module \"%s\" (bazel_compatibility: %s)", + curVersion.getOriginal(), module.getKey(), module.getBazelCompatibility()); if (mode == BazelCompatibilityMode.WARNING) { eventHandler.handle(Event.warn(message)); diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java index a3631acfb3c4a3..4ee98ed19af66f 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/BazelModuleResolutionFunctionTest.java @@ -162,7 +162,7 @@ public void testSimpleBazelCompatibilityFailure() throws Exception { assertThat(result.hasError()).isTrue(); assertContainsEvent( - "Bazel version 5.1.4 is not compatible with module \"mod@1.0\" (bazel_compatibility:" + "Bazel version 5.1.4 is not compatible with module \"\" (bazel_compatibility:" + " [>5.1.0, <5.1.4])"); } @@ -180,7 +180,7 @@ public void testBazelCompatibilityWarning() throws Exception { assertThat(result.hasError()).isFalse(); assertContainsEvent( - "Bazel version 5.1.4 is not compatible with module \"mod@1.0\" (bazel_compatibility:" + "Bazel version 5.1.4 is not compatible with module \"\" (bazel_compatibility:" + " [>5.1.0, <5.1.4])"); } @@ -198,7 +198,7 @@ public void testDisablingBazelCompatibility() throws Exception { assertThat(result.hasError()).isFalse(); assertDoesNotContainEvent( - "Bazel version 5.1.4 is not compatible with module \"mod@1.0\" (bazel_compatibility:" + "Bazel version 5.1.4 is not compatible with module \"\" (bazel_compatibility:" + " [>5.1.0, <5.1.4])"); } @@ -227,6 +227,36 @@ public void testBazelCompatibilityFailure() throws Exception { + " [<=5.1.4, -5.1.2])"); } + @Test + public void testRcIsCompatibleWithReleaseRequirement() throws Exception { + scratch.file( + rootDirectory.getRelative("MODULE.bazel").getPathString(), + "module(name='mod', version='1.0', bazel_compatibility=['>=6.4.0'])"); + + embedBazelVersion("6.4.0rc1"); + EvaluationResult result = + evaluator.evaluate(ImmutableList.of(BazelModuleResolutionValue.KEY), evaluationContext); + + assertThat(result.hasError()).isFalse(); + } + + @Test + public void testPrereleaseIsNotCompatibleWithReleaseRequirement() throws Exception { + scratch.file( + rootDirectory.getRelative("MODULE.bazel").getPathString(), + "module(name='mod', version='1.0', bazel_compatibility=['>=6.4.0'])"); + + embedBazelVersion("6.4.0-pre-1"); + reporter.removeHandler(failFastHandler); + EvaluationResult result = + evaluator.evaluate(ImmutableList.of(BazelModuleResolutionValue.KEY), evaluationContext); + + assertThat(result.hasError()).isTrue(); + assertContainsEvent( + "Bazel version 6.4.0-pre-1 is not compatible with module \"\" (bazel_compatibility:" + + " [>=6.4.0])"); + } + private void embedBazelVersion(String version) { // Double-get version-info to determine if it's the cached instance or not, and if not cache it. BlazeVersionInfo blazeInfo1 = BlazeVersionInfo.instance();