Do glob result sorting and @-escaping at the last moment.

c4f2d80270f1ce947fcf7fb0a4e5f0afb3a7062d changed legacy globbing (without a test) to prepend ':' to any targets starting with '@'. It did not change the skyframe globbing logic, which means incrementality bugs. Fix this issue by doing the escaping just before glob() returns its result, which is a common path for both glob implementations.

Fixes https://github.com/bazelbuild/bazel/issues/10606.

Closes #10610.

PiperOrigin-RevId: 292569236
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 9bd8252..84d2681 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -360,6 +360,23 @@
     assertSrcs(validPackageWithoutErrors(skyKey), "foo", "//foo:a.config", "//foo:b.txt");
   }
 
+  @Test
+  public void globEscapesAt() throws Exception {
+    scratch.file("foo/BUILD", "filegroup(name = 'foo', srcs = glob(['*.txt']))");
+    scratch.file("foo/@f.txt");
+    preparePackageLoading(rootDirectory);
+    SkyKey skyKey = PackageValue.key(PackageIdentifier.parse("@//foo"));
+    assertSrcs(validPackageWithoutErrors(skyKey), "foo", "//foo:@f.txt");
+
+    scratch.overwriteFile("foo/BUILD", "filegroup(name = 'foo', srcs = glob(['*.txt'])) # comment");
+    getSkyframeExecutor()
+        .invalidateFilesUnderPathForTesting(
+            reporter,
+            ModifiedFileSet.builder().modify(PathFragment.create("foo/BUILD")).build(),
+            Root.fromPath(rootDirectory));
+    assertSrcs(validPackageWithoutErrors(skyKey), "foo", "//foo:@f.txt");
+  }
+
   /**
    * Tests that a symlink to a file outside of the package root is handled consistently. If the
    * default behavior of Bazel was changed from {@code