Rename dont_symlink_directories_in_execroot to toplevel_output_directories .

It's better to describe concepts by saying what they are instead of saying what they are not.

RELNOTES: None.
PiperOrigin-RevId: 303737603
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
index 2bfe9d2..2d95d9e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
@@ -269,7 +269,7 @@
           "output_root",
           String.format(
               "Ninja output root directory '%s' must be declared"
-                  + " using global workspace function dont_symlink_directories_in_execroot().",
+                  + " using global workspace function toplevel_output_directories().",
               outputRoot.getPathString()));
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
index 29d9b23..a625f69 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraphRule.java
@@ -66,7 +66,7 @@
                 .setDoc(
                     "<p>Directory under workspace, where all the intermediate and output artifacts"
                         + " will be created.</p><p>Must not be symlinked to the execroot. For"
-                        + " that, dont_symlink_directories_in_execroot function should be used in"
+                        + " that, toplevel_output_directories function should be used in"
                         + " WORKSPACE file.</p>"))
         .add(
             attr("output_root_inputs", STRING_LIST)
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
index 65c2aa4..ae4444b 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
@@ -175,7 +175,7 @@
       if (this.notSymlinkedInExecrootDirectories.contains(target.getBaseName())) {
         throw new AbruptExitException(
             "Directories specified with "
-                + "dont_symlink_directories_in_execroot should be ignored and can not be used"
+                + "toplevel_output_directories should be ignored and can not be used"
                 + " as sources.",
             ExitCode.COMMAND_LINE_ERROR);
       }
@@ -380,7 +380,7 @@
     if (mainRepoRoots.size() > 1) {
       if (!this.notSymlinkedInExecrootDirectories.isEmpty()) {
         throw new AbruptExitException(
-            "dont_symlink_directories_in_execroot is "
+            "toplevel_output_directories is "
                 + "not supported together with --package_path option.",
             ExitCode.COMMAND_LINE_ERROR);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
index 252de68..9254578 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceGlobals.java
@@ -118,24 +118,23 @@
     for (String path : pathsList) {
       PathFragment pathFragment = PathFragment.create(path);
       if (pathFragment.isEmpty()) {
-        throw Starlark.errorf(
-            "Empty path can not be passed to dont_symlink_directories_in_execroot.");
+        throw Starlark.errorf("Empty path can not be passed to toplevel_output_directories.");
       }
       if (pathFragment.containsUplevelReferences() || pathFragment.segmentCount() > 1) {
         throw Starlark.errorf(
-            "dont_symlink_directories_in_execroot can only accept top level directories under"
+            "toplevel_output_directories can only accept top level directories under"
                 + " workspace, \"%s\" can not be specified as an attribute.",
             path);
       }
       if (pathFragment.isAbsolute()) {
         throw Starlark.errorf(
-            "dont_symlink_directories_in_execroot can only accept top level directories under"
+            "toplevel_output_directories can only accept top level directories under"
                 + " workspace, absolute path \"%s\" can not be specified as an attribute.",
             path);
       }
       if (!set.add(pathFragment.getBaseName())) {
         throw Starlark.errorf(
-            "dont_symlink_directories_in_execroot should not contain duplicate values: \"%s\" is"
+            "toplevel_output_directories should not contain duplicate values: \"%s\" is"
                 + " specified more then once.",
             path);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java
index 5b91936..9d45366 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java
@@ -40,8 +40,8 @@
   /**
    * Returns directories, that should not be symlinked under the execroot.
    *
-   * <p>Searches for dont_symlink_directories_in_execroot calls in the WORKSPACE file, and gathers
-   * values of all "paths" attributes.
+   * <p>Searches for toplevel_output_directories calls in the WORKSPACE file, and gathers values of
+   * all "paths" attributes.
    */
   public static ImmutableSortedSet<String> getNotSymlinkedInExecrootDirectories(Environment env)
       throws InterruptedException {
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/WorkspaceGlobalsApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/WorkspaceGlobalsApi.java
index 736507b..67881e2 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/WorkspaceGlobalsApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/WorkspaceGlobalsApi.java
@@ -85,7 +85,7 @@
       throws EvalException, InterruptedException;
 
   @SkylarkCallable(
-      name = "dont_symlink_directories_in_execroot",
+      name = "toplevel_output_directories",
       doc =
           "Exclude directories under workspace from symlinking into execroot.\n"
               + "<p>Normally, source directories are symlinked to the execroot, so that the"
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
index 58ffb23..a618fa8 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaBuildTest.java
@@ -59,7 +59,7 @@
 
   @Test
   public void testSourceFileNotInSubtree() throws Exception {
-    rewriteWorkspace("dont_symlink_directories_in_execroot(paths=['out'])");
+    rewriteWorkspace("toplevel_output_directories(paths=['out'])");
 
     scratch.file("a/n.ninja", "rule cp", " command = cp $in $out", "build out/o: cp subdir/i");
 
@@ -77,8 +77,7 @@
   @Test
   public void testNinjaBuildRule() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/input.txt", "World");
     scratch.file(
@@ -118,8 +117,7 @@
   @Test
   public void testNinjaGraphRuleWithPhonyTarget() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/input.txt", "World");
     scratch.file(
@@ -161,8 +159,7 @@
   @Test
   public void testNinjaGraphRuleWithPhonyTree() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/a.txt", "A");
     scratch.file("build_config/b.txt", "B");
@@ -257,8 +254,7 @@
   @Test
   public void testDepsMapping() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("input.txt", "World");
     scratch.file(
@@ -305,8 +301,7 @@
   @Test
   public void testOnlySubGraphIsCreated() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/a.txt", "A");
     scratch.file("build_config/b.txt", "B");
@@ -357,8 +352,7 @@
   @Test
   public void testRuleWithDepfileVariable() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("input");
     scratch.file(
@@ -395,8 +389,7 @@
   @Test
   public void testCreateOutputSymlinkArtifacts() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file(
         "build_config/build.ninja",
@@ -434,8 +427,7 @@
   @Test
   public void testCreateIntermediateOutputSymlinkArtifacts() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file(
         "build_config/build.ninja",
@@ -476,8 +468,7 @@
   @Test
   public void testOutputRootInputsWithConflictingNinjaActionOutput() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/hello.txt", "hello");
     scratch.file(
@@ -516,8 +507,7 @@
       throws Exception {
 
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/hello.txt", "hello");
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
index 486669f..c134930 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaGraphTest.java
@@ -57,8 +57,7 @@
   @Test
   public void testNinjaGraphRule() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     scratch.file("build_config/input.txt", "World");
     scratch.file(
@@ -107,8 +106,7 @@
   @Test
   public void testNinjaGraphRuleWithPhonyTarget() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     // We do not have to have the real files in place, the rule only reads
     // the contents of Ninja files.
@@ -165,8 +163,7 @@
   @Test
   public void testNinjaGraphRuleWithPhonyTree() throws Exception {
     rewriteWorkspace(
-        "workspace(name = 'test')",
-        "dont_symlink_directories_in_execroot(paths = ['build_config'])");
+        "workspace(name = 'test')", "toplevel_output_directories(paths = ['build_config'])");
 
     // We do not have to have the real files in place, the rule only reads
     // the contents of Ninja files.
diff --git a/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java b/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java
index 00c9868..0ca1101 100644
--- a/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java
+++ b/src/test/java/com/google/devtools/build/lib/blackbox/tests/NinjaBlackBoxTest.java
@@ -37,7 +37,7 @@
         .write(
             WORKSPACE,
             String.format("workspace(name = '%s')", testName.getMethodName()),
-            "dont_symlink_directories_in_execroot(paths = ['build_dir'])");
+            "toplevel_output_directories(paths = ['build_dir'])");
   }
 
   @Test
@@ -102,8 +102,7 @@
 
     BuilderRunner bazel = context().bazel();
     ProcessResult result = bazel.shouldFail().build("//:ninja_target");
-    assertThat(result.errString())
-        .contains("name 'dont_symlink_directories_in_execroot' is not defined");
+    assertThat(result.errString()).contains("name 'toplevel_output_directories' is not defined");
     assertThat(result.errString()).contains("FAILED: Build did NOT complete successfully");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/SymlinkForestTest.java b/src/test/java/com/google/devtools/build/lib/buildtool/SymlinkForestTest.java
index 8bd5f9c..ba9bac6 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/SymlinkForestTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/SymlinkForestTest.java
@@ -706,7 +706,7 @@
     assertThat(exception)
         .hasMessageThat()
         .isEqualTo(
-            "Directories specified with dont_symlink_directories_in_execroot should be "
+            "Directories specified with toplevel_output_directories should be "
                 + "ignored and can not be used as sources.");
   }
 
@@ -743,7 +743,7 @@
     assertThat(exception)
         .hasMessageThat()
         .isEqualTo(
-            "dont_symlink_directories_in_execroot is not supported together "
+            "toplevel_output_directories is not supported together "
                 + "with --package_path option.");
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
index 02b80ad..cc93fc8 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
@@ -628,38 +628,38 @@
       PrecomputedValue.STARLARK_SEMANTICS.set(injectable, semanticsWithNinjaActions);
 
       assertThat(
-              parseWorkspaceFileValue("dont_symlink_directories_in_execroot(paths = [\"out\"])")
+              parseWorkspaceFileValue("toplevel_output_directories(paths = [\"out\"])")
                   .getDoNotSymlinkInExecrootPaths())
           .containsExactly("out");
       assertThat(
               parseWorkspaceFileValue(
-                      "dont_symlink_directories_in_execroot(paths = [\"out\", \"one more with"
+                      "toplevel_output_directories(paths = [\"out\", \"one more with"
                           + " space\"])")
                   .getDoNotSymlinkInExecrootPaths())
           .containsExactly("out", "one more with space");
       // Empty sequence is allowed.
       assertThat(
-              parseWorkspaceFileValue("dont_symlink_directories_in_execroot(paths = [])")
+              parseWorkspaceFileValue("toplevel_output_directories(paths = [])")
                   .getDoNotSymlinkInExecrootPaths())
           .isEmpty();
 
       parseWorkspaceFileValueWithError(
-          "dont_symlink_directories_in_execroot should not "
+          "toplevel_output_directories should not "
               + "contain duplicate values: \"out\" is specified more then once.",
-          "dont_symlink_directories_in_execroot(paths = [\"out\", \"out\"])");
+          "toplevel_output_directories(paths = [\"out\", \"out\"])");
       parseWorkspaceFileValueWithError(
-          "dont_symlink_directories_in_execroot can only accept "
+          "toplevel_output_directories can only accept "
               + "top level directories under workspace, \"out/subdir\" "
               + "can not be specified as an attribute.",
-          "dont_symlink_directories_in_execroot(paths = [\"out/subdir\"])");
+          "toplevel_output_directories(paths = [\"out/subdir\"])");
       parseWorkspaceFileValueWithError(
-          "Empty path can not be passed to " + "dont_symlink_directories_in_execroot.",
-          "dont_symlink_directories_in_execroot(paths = [\"\"])");
+          "Empty path can not be passed to " + "toplevel_output_directories.",
+          "toplevel_output_directories(paths = [\"\"])");
       parseWorkspaceFileValueWithError(
-          "dont_symlink_directories_in_execroot can only "
+          "toplevel_output_directories can only "
               + "accept top level directories under workspace, \"/usr/local/bin\" "
               + "can not be specified as an attribute.",
-          "dont_symlink_directories_in_execroot(paths = [\"/usr/local/bin\"])");
+          "toplevel_output_directories(paths = [\"/usr/local/bin\"])");
     } finally {
       PrecomputedValue.STARLARK_SEMANTICS.set(injectable, semantics);
     }