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) {