aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/cmdline/Label.java
diff options
context:
space:
mode:
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.java33
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;