Do not consider //external: a repository-local reference.

Fixes #360.

--
MOS_MIGRATED_REVID=101360551
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
index 9365e9a..931bcf9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
@@ -30,6 +30,7 @@
 public abstract class AbstractAttributeMapper implements AttributeMap {
 
   private static final PathFragment VISIBILITY = new PathFragment("visibility");
+  private static final PathFragment EXTERNAL = new PathFragment("external");
 
   private final Package pkg;
   private final RuleClass ruleClass;
@@ -164,8 +165,9 @@
           // generally tools, which go to the main repository.
           absoluteLabel = label;
         } else if (label.getPackageIdentifier().getRepository().isDefault()
-            && VISIBILITY.equals(label.getPackageIdentifier().getPackageFragment())) {
-          // //visibility: labels must also be special-cased :(
+            && (VISIBILITY.equals(label.getPackageIdentifier().getPackageFragment())
+                || EXTERNAL.equals(label.getPackageIdentifier().getPackageFragment()))) {
+          // //visibility: and //external: labels must also be special-cased :(
           absoluteLabel = label;
         } else {
           absoluteLabel = ruleLabel.resolveRepositoryRelative(label);
diff --git a/src/test/shell/bazel/local_repository_test.sh b/src/test/shell/bazel/local_repository_test.sh
index ff6d387..e3f1460 100755
--- a/src/test/shell/bazel/local_repository_test.sh
+++ b/src/test/shell/bazel/local_repository_test.sh
@@ -481,7 +481,7 @@
   assert_contains "Michaelangelo" bazel-genfiles/external/mutant/tmnt
 }
 
-function test_local_deps() {
+function test_external_deps_in_remote_repo() {
   local r=$TEST_TMPDIR/r
   rm -fr $r
   mkdir -p $r
@@ -491,6 +491,42 @@
     path = "$r",
 )
 
+bind(
+    name = "e",
+    actual = "@r//:g",
+)
+EOF
+
+  cat > $r/BUILD <<EOF
+genrule(
+    name = "r",
+    srcs = ["//external:e"],
+    outs = ["r.out"],
+    cmd = "cp \$< \$@",
+)
+
+genrule(
+    name = "g",
+    srcs = [],
+    outs = ["g.out"],
+    cmd = "echo GOLF > \$@",
+    visibility = ["//visibility:public"],
+)
+EOF
+
+ bazel build @r//:r || fail "build failed"
+ assert_contains "GOLF" bazel-genfiles/external/r/r.out
+}
+
+function test_local_deps() {
+  local r=$TEST_TMPDIR/r
+  rm -fr $r
+  mkdir -p $r
+  cat > WORKSPACE <<EOF
+local_repository(
+    name = "r",
+    path = "$r",
+)
 EOF
 
   mkdir -p $r/a