diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/cmdline/Label.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/cmdline/Label.java | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java index 9d14e6d7d8..6f238429eb 100644 --- a/src/main/java/com/google/devtools/build/lib/cmdline/Label.java +++ b/src/main/java/com/google/devtools/build/lib/cmdline/Label.java @@ -155,17 +155,22 @@ public final class Label repo = absName; absName = "//:" + absName.substring(1); } + String error = RepositoryName.validate(repo); + if (error != null) { + throw new LabelSyntaxException( + "invalid repository name '" + StringUtilities.sanitizeControlChars(repo) + "': " + error); + } try { LabelValidator.PackageAndTarget labelParts = LabelValidator.parseAbsoluteLabel(absName); - PackageIdentifier pkgIdWithoutRepo = - validatePackageName(labelParts.getPackageName(), labelParts.getTargetName()); - PathFragment packageFragment = pkgIdWithoutRepo.getPackageFragment(); + PackageIdentifier pkgId = + validatePackageName( + labelParts.getPackageName(), labelParts.getTargetName(), repo, repositoryMapping); + PathFragment packageFragment = pkgId.getPackageFragment(); if (repo.isEmpty() && ABSOLUTE_PACKAGE_NAMES.contains(packageFragment)) { - repo = "@"; + pkgId = + PackageIdentifier.create(getGlobalRepoName("@", repositoryMapping), packageFragment); } - RepositoryName globalRepoName = getGlobalRepoName(repo, repositoryMapping); - return create( - PackageIdentifier.create(globalRepoName, packageFragment), labelParts.getTargetName()); + return create(pkgId, labelParts.getTargetName()); } catch (BadLabelException e) { throw new LabelSyntaxException(e.getMessage()); } @@ -289,15 +294,25 @@ public final class Label return name; } + private static PackageIdentifier validatePackageName(String packageIdentifier, String name) + throws LabelSyntaxException { + return validatePackageName( + packageIdentifier, name, /* repo= */ null, /* repositoryMapping= */ null); + } + /** * Validates the given package name and returns a canonical {@link PackageIdentifier} instance if * it is valid. Otherwise it throws a SyntaxException. */ - private static PackageIdentifier validatePackageName(String packageIdentifier, String name) + private static PackageIdentifier validatePackageName( + String packageIdentifier, + String name, + String repo, + ImmutableMap<RepositoryName, RepositoryName> repositoryMapping) throws LabelSyntaxException { String error = null; try { - return PackageIdentifier.parse(packageIdentifier); + return PackageIdentifier.parse(packageIdentifier, repo, repositoryMapping); } catch (LabelSyntaxException e) { error = e.getMessage(); error = "invalid package name '" + packageIdentifier + "': " + error; |