Introduce flag --incompatible_disallow_empty_glob=true
Implements https://github.com/bazelbuild/bazel/issues/8195
When the flag is enabled, the default value of allow_empty in glob is False.
RELNOTES: New flag `--incompatible_disallow_empty_glob`. See https://github.com/bazelbuild/bazel/issues/8195
PiperOrigin-RevId: 250263059
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
index bdd7d35..7583924 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
@@ -661,7 +661,7 @@
"glob()",
"insufficient arguments received by glob(include: sequence of strings, "
+ "*, exclude: sequence of strings = [], exclude_directories: int = 1, "
- + "allow_empty: bool = True) (got 0, expected at least 1)");
+ + "allow_empty: bool = <unbound>) (got 0, expected at least 1)");
}
@Test
@@ -671,7 +671,7 @@
"glob(['a'], ['b'])",
"too many (2) positional arguments in call to glob(include: sequence of strings, "
+ "*, exclude: sequence of strings = [], exclude_directories: int = 1, "
- + "allow_empty: bool = True)");
+ + "allow_empty: bool = <unbound>)");
}
@Test
@@ -681,7 +681,7 @@
"glob(1,2,3,4)",
"too many (4) positional arguments in call to glob(include: sequence of strings, "
+ "*, exclude: sequence of strings = [], exclude_directories: int = 1, "
- + "allow_empty: bool = True)");
+ + "allow_empty: bool = <unbound>)");
}
@Test
@@ -809,6 +809,48 @@
}
@Test
+ public void testGlobDisallowEmpty() throws Exception {
+ Path buildFile = scratch.file("/pkg/BUILD", "x = " + "glob(['*.foo'])");
+ Package pkg =
+ packages.createPackage(
+ "pkg",
+ RootedPath.toRootedPath(root, buildFile),
+ "--incompatible_disallow_empty_glob=false");
+ assertThat(pkg.containsErrors()).isFalse();
+ }
+
+ @Test
+ public void testGlobAllowEmpty() throws Exception {
+ events.setFailFast(false);
+
+ Path buildFile = scratch.file("/pkg/BUILD", "x = " + "glob(['*.foo'])");
+ Package pkg =
+ packages.createPackage(
+ "pkg",
+ RootedPath.toRootedPath(root, buildFile),
+ "--incompatible_disallow_empty_glob=true");
+
+ assertThat(pkg.containsErrors()).isTrue();
+ events.assertContainsError(
+ "glob pattern '*.foo' didn't match anything, but allow_empty is set to False");
+ }
+
+ @Test
+ public void testGlobNotBoolean() throws Exception {
+ events.setFailFast(false);
+
+ Path buildFile = scratch.file("/pkg/BUILD", "x = " + "glob(['*.foo'], allow_empty = 5)");
+ Package pkg =
+ packages.createPackage(
+ "pkg",
+ RootedPath.toRootedPath(root, buildFile),
+ "--incompatible_disallow_empty_glob=true");
+
+ assertThat(pkg.containsErrors()).isTrue();
+ events.assertContainsError("expected boolean for argument `allow_empty`, got `5`");
+ }
+
+ @Test
public void testNativeModuleIsAvailable() throws Exception {
Path buildFile = scratch.file("/pkg/BUILD", "native.cc_library(name='bar')");
Package pkg =
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index d202f70..bdd8af9 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -140,6 +140,7 @@
"--incompatible_disable_objc_provider_resources=" + rand.nextBoolean(),
"--incompatible_disable_third_party_license_checking=" + rand.nextBoolean(),
"--incompatible_disallow_dict_plus=" + rand.nextBoolean(),
+ "--incompatible_disallow_empty_glob=" + rand.nextBoolean(),
"--incompatible_disallow_filetype=" + rand.nextBoolean(),
"--incompatible_disallow_legacy_javainfo=" + rand.nextBoolean(),
"--incompatible_disallow_legacy_java_provider=" + rand.nextBoolean(),
@@ -191,6 +192,7 @@
.incompatibleDisableObjcProviderResources(rand.nextBoolean())
.incompatibleDisableThirdPartyLicenseChecking(rand.nextBoolean())
.incompatibleDisallowDictPlus(rand.nextBoolean())
+ .incompatibleDisallowEmptyGlob(rand.nextBoolean())
.incompatibleDisallowFileType(rand.nextBoolean())
.incompatibleDisallowLegacyJavaInfo(rand.nextBoolean())
.incompatibleDisallowLegacyJavaProvider(rand.nextBoolean())