aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java
diff options
context:
space:
mode:
authorGravatar twerth <twerth@google.com>2018-05-15 05:02:31 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-15 05:03:50 -0700
commitc4f2d80270f1ce947fcf7fb0a4e5f0afb3a7062d (patch)
tree5928bf2f9d72ffc3eec0a5e08456e2574a4c2e31 /src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java
parentbd16ab9454e624a26c53a0f3fb892e20fb1c36e6 (diff)
Allow more characters in labels.
Partly addresses #374. Specifically allow !%^`"'&;<>?[]{|} in target and package names. It's actually simpler now to declare what we don't allow. In target names: 0-31 (control characters) 58 ':' (colon) 92 '\' (backslash) 127 (delete) In package names: 0-31 (control characters) 58 ':' (colon) 64 '@' (at-sign) 92 '\' (backslash) 127 (delete) - '\' is a path segment separator on Windows, and allowing it can lead to silent output file conflicts and - therefore - data corruption. We may be able to allow it in the future, but I didn't want to make that call. - ':' is a special character that Bazel interprets as the package name / target name separator. - '@' in package names can probably be allowed; at the beginning of a label it indicates a workspace name, but not within a segment. We actually have some tests that disallow it specifically, but those can probably just be deleted; however, it does require a bit of investigation, so I decided to delay that change. It is possible that we don't correctly escape filenames in all cases. Also note that the shell may require escaping for specific characters, and that Bazel treats a single '*' (star) target name specially when given on the command line. RELNOTES: Bazel now allows almost all 7-bit ASCII characters in labels. PiperOrigin-RevId: 196650651
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java66
1 files changed, 59 insertions, 7 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java
index 2156ddf84d..fcb187f268 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java
@@ -53,6 +53,37 @@ public class LabelValidatorTest {
assertThat(LabelValidator.validatePackageName("a/b..")).isNull();
assertThat(LabelValidator.validatePackageName("a$( )/b..")).isNull();
+ // These are in ascii code order.
+ assertThat(LabelValidator.validatePackageName("foo!bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo\"bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo#bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo$bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo%bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo&bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo'bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo(bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo)bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo*bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo+bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo,bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo-bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo.bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo+bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo;bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo<bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo=bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo>bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo?bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo[bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo]bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo^bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo_bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo`bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo{bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo|bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo}bar")).isNull();
+ assertThat(LabelValidator.validatePackageName("foo~bar")).isNull();
+
// Bad:
assertThat(LabelValidator.validatePackageName("/foo"))
.isEqualTo("package names may not start with '/'");
@@ -82,16 +113,39 @@ public class LabelValidatorTest {
@Test
public void testValidateTargetName() throws Exception {
-
assertThat(LabelValidator.validateTargetName("foo")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo!bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo\"bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo#bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo$bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo%bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo&bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo'bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo(bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo)bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo*bar")).isNull();
assertThat(LabelValidator.validateTargetName("foo+bar")).isNull();
- assertThat(LabelValidator.validateTargetName("foo_bar")).isNull();
- assertThat(LabelValidator.validateTargetName("foo=bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo,bar")).isNull();
assertThat(LabelValidator.validateTargetName("foo-bar")).isNull();
assertThat(LabelValidator.validateTargetName("foo.bar")).isNull();
- assertThat(LabelValidator.validateTargetName("foo@bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo+bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo;bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo<bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo=bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo>bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo?bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo[bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo]bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo^bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo_bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo`bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo{bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo|bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo}bar")).isNull();
assertThat(LabelValidator.validateTargetName("foo~bar")).isNull();
- assertThat(LabelValidator.validateTargetName("foo#bar")).isNull();
+
+ assertThat(LabelValidator.validateTargetName("foo/bar")).isNull();
+ assertThat(LabelValidator.validateTargetName("foo@bar")).isNull();
assertThat(LabelValidator.validateTargetName("foo/"))
.isEqualTo("target names may not end with '/'");
@@ -99,8 +153,6 @@ public class LabelValidatorTest {
.isEqualTo("target names may not contain ':'");
assertThat(LabelValidator.validateTargetName("bar:"))
.isEqualTo("target names may not contain ':'");
- assertThat(LabelValidator.validateTargetName("bar&"))
- .isEqualTo("target names may not contain '&'");
}
@Test