Add support for @foo//:bar-format labels on the command line

It's annoying how split up the Label parsing code is, but it seems like too much
work to bother fixing. Maybe next fixit.

--
MOS_MIGRATED_REVID=94758275
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
index dee9659..c10b252 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java
@@ -81,6 +81,7 @@
   @VisibleForTesting
   static String normalize(String path) {
     Preconditions.checkArgument(!path.startsWith("/"));
+    Preconditions.checkArgument(!path.startsWith("@"));
     Iterator<String> it = SLASH_SPLITTER.split(path).iterator();
     List<String> pieces = new ArrayList<>();
     while (it.hasNext()) {
@@ -502,6 +503,16 @@
       // constant (see lib/blaze/commands/target-syntax.txt).
 
       String originalPattern = pattern;
+      final boolean includesRepo = pattern.startsWith("@");
+      String repoName = "";
+      if (includesRepo) {
+        int pkgStart = pattern.indexOf("//");
+        if (pkgStart < 0) {
+          throw new TargetParsingException("Couldn't find package in target " + pattern);
+        }
+        repoName = pattern.substring(0, pkgStart);
+        pattern = pattern.substring(pkgStart);
+      }
       final boolean isAbsolute = pattern.startsWith("//");
 
       // We now absolutize non-absolute target patterns.
@@ -553,9 +564,9 @@
       }
 
 
-      if (isAbsolute || pattern.contains(":")) {
+      if (includesRepo || isAbsolute || pattern.contains(":")) {
         PackageAndTarget packageAndTarget;
-        String fullLabel = "//" + pattern;
+        String fullLabel = repoName + "//" + pattern;
         try {
           packageAndTarget = LabelValidator.validateAbsoluteLabel(fullLabel);
         } catch (BadLabelException e) {