aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/Label.java79
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/LabelSerializationProxy.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java33
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/cmdline/TargetPattern.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupValue.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java2
41 files changed, 218 insertions, 74 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
index 4509092cca..2642687713 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactFactory.java
@@ -342,7 +342,7 @@ public class ArtifactFactory implements ArtifactResolver, ArtifactSerializer, Ar
return null;
}
- RepositoryName repoName = PackageIdentifier.DEFAULT_REPOSITORY_NAME;
+ RepositoryName repoName = PackageIdentifier.MAIN_REPOSITORY_NAME;
Pair<RepositoryName, PathFragment> repo = RepositoryName.fromPathFragment(dir);
if (repo != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index b694cc631c..780e881660 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -386,11 +386,14 @@ public abstract class DependencyResolver {
}
try {
if (attribute.getType() == BuildType.LABEL) {
- Label label = BuildType.LABEL.cast(actualValue);
+ Label label = rule.getLabel().resolveRepositoryRelative(
+ BuildType.LABEL.cast(actualValue));
builder.put(attribute, LabelAndConfiguration.of(label, actualConfig));
} else if (attribute.getType() == BuildType.LABEL_LIST) {
for (Label label : BuildType.LABEL_LIST.cast(actualValue)) {
- builder.put(attribute, LabelAndConfiguration.of(label, actualConfig));
+ builder.put(attribute, LabelAndConfiguration.of(
+ rule.getLabel().resolveRepositoryRelative(label),
+ actualConfig));
}
} else {
throw new IllegalStateException(
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
index 48a9fea963..7c48f5440d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryContext.java
@@ -18,6 +18,7 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.AggregatingAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
@@ -363,6 +364,14 @@ public class SkylarkRepositoryContext {
// Resolve the label given by value into a file path.
private SkylarkPath getPathFromLabel(Label label) throws EvalException {
// Look for package.
+ if (label.getPackageIdentifier().getRepository().isDefault()) {
+ try {
+ label = Label.create(label.getPackageIdentifier().makeAbsolute(),
+ label.getName());
+ } catch (LabelSyntaxException e) {
+ throw new IllegalStateException(e); // Can't happen because the input label is valid
+ }
+ }
SkyKey pkgSkyKey = PackageLookupValue.key(label.getPackageIdentifier());
PackageLookupValue pkgLookupValue = (PackageLookupValue) env.getValue(pkgSkyKey);
if (pkgLookupValue == null) {
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 b1bcffa482..030e689b82 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
@@ -48,7 +48,7 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
* Package names that aren't made relative to the current repository because they mean special
* things to Bazel.
*/
- private static final ImmutableSet<PathFragment> ABSOLUTE_PACKAGE_NAMES = ImmutableSet.of(
+ public static final ImmutableSet<PathFragment> ABSOLUTE_PACKAGE_NAMES = ImmutableSet.of(
// Used for select
new PathFragment("conditions"),
// dependencies that are a function of the configuration
@@ -59,7 +59,7 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
Label.EXTERNAL_PACKAGE_NAME);
public static final PackageIdentifier EXTERNAL_PACKAGE_IDENTIFIER =
- PackageIdentifier.createInDefaultRepo(EXTERNAL_PACKAGE_NAME);
+ PackageIdentifier.createInMainRepo(EXTERNAL_PACKAGE_NAME);
public static final String EXTERNAL_PATH_PREFIX = "external";
@@ -71,9 +71,28 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
* {@literal @}foo//bar
* {@literal @}foo//bar:baz
* </pre>
+ *
+ * <p>Treats labels in the default repository as being in the main repository instead.
*/
public static Label parseAbsolute(String absName) throws LabelSyntaxException {
- String repo = PackageIdentifier.DEFAULT_REPOSITORY;
+ return parseAbsolute(absName, true);
+ }
+
+ /**
+ * Factory for Labels from absolute string form. e.g.
+ * <pre>
+ * //foo/bar
+ * //foo/bar:quux
+ * {@literal @}foo//bar
+ * {@literal @}foo//bar:baz
+ * </pre>
+ *
+ * @param defaultToMain Treat labels in the default repository as being in the main
+ * one instead.
+ */
+ public static Label parseAbsolute(String absName, boolean defaultToMain)
+ throws LabelSyntaxException {
+ String repo = defaultToMain ? "@" : PackageIdentifier.DEFAULT_REPOSITORY;
int packageStartPos = absName.indexOf("//");
if (packageStartPos > 0) {
repo = absName.substring(0, packageStartPos);
@@ -83,8 +102,12 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
LabelValidator.PackageAndTarget labelParts = LabelValidator.parseAbsoluteLabel(absName);
PackageIdentifier pkgIdWithoutRepo =
validate(labelParts.getPackageName(), labelParts.getTargetName());
+ PathFragment packageFragment = pkgIdWithoutRepo.getPackageFragment();
+ if (repo.isEmpty() && ABSOLUTE_PACKAGE_NAMES.contains(packageFragment)) {
+ repo = "@";
+ }
return new Label(
- PackageIdentifier.create(repo, pkgIdWithoutRepo.getPackageFragment()),
+ PackageIdentifier.create(repo, packageFragment),
labelParts.getTargetName());
} catch (BadLabelException e) {
throw new LabelSyntaxException(e.getMessage());
@@ -98,14 +121,18 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
*
* <p>Do not use this when the argument is not hard-wired.
*/
- public static Label parseAbsoluteUnchecked(String absName) {
+ public static Label parseAbsoluteUnchecked(String absName, boolean defaultToMain) {
try {
- return parseAbsolute(absName);
+ return parseAbsolute(absName, defaultToMain);
} catch (LabelSyntaxException e) {
throw new IllegalArgumentException(e);
}
}
+ public static Label parseAbsoluteUnchecked(String absName) {
+ return parseAbsoluteUnchecked(absName, true);
+ }
+
/**
* Factory for Labels from separate components.
*
@@ -243,7 +270,7 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
}
private Object writeReplace() {
- return new LabelSerializationProxy(toString());
+ return new LabelSerializationProxy(getUnambiguousCanonicalForm());
}
private void readObject(ObjectInputStream stream) throws InvalidObjectException {
@@ -322,7 +349,7 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
/**
* Renders this label in canonical form.
*
- * <p>invariant: {@code parseAbsolute(x.toString()).equals(x)}
+ * <p>invariant: {@code parseAbsolute(x.toString(), false).equals(x)}
*/
@Override
public String toString() {
@@ -332,21 +359,46 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
/**
* Renders this label in canonical form.
*
- * <p>invariant: {@code parseAbsolute(x.toString()).equals(x)}
+ * <p>invariant: {@code parseAbsolute(x.getCanonicalForm(), false).equals(x)}
*/
public String getCanonicalForm() {
+ return getDefaultCanonicalForm();
+ }
+
+ public String getUnambiguousCanonicalForm() {
return packageIdentifier.getRepository() + "//" + packageIdentifier.getPackageFragment()
+ ":" + name;
}
/**
+ * Renders this label in canonical form, except with labels in the main and default
+ * repositories conflated.
+ */
+ public String getDefaultCanonicalForm() {
+ String repository;
+ if (packageIdentifier.getRepository().isMain()) {
+ repository = "";
+ } else {
+ repository = packageIdentifier.getRepository().getName();
+ }
+ return repository + "//" + packageIdentifier.getPackageFragment()
+ + ":" + name;
+ }
+
+ /**
* Renders this label in shorthand form.
*
* <p>Labels with canonical form {@code //foo/bar:bar} have the shorthand form {@code //foo/bar}.
* All other labels have identical shorthand and canonical forms.
*/
public String toShorthandString() {
- return packageIdentifier.getRepository() + (getPackageFragment().getBaseName().equals(name)
+ String repository;
+ if (packageIdentifier.getRepository().isMain()) {
+ repository = "";
+ } else {
+ repository = packageIdentifier.getRepository().getName();
+ }
+ return repository + (getPackageFragment().getBaseName().equals(name)
? "//" + getPackageFragment()
: toString());
}
@@ -391,7 +443,7 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
}
if (LabelValidator.isAbsolute(relName)) {
- return resolveRepositoryRelative(parseAbsolute(relName));
+ return resolveRepositoryRelative(parseAbsolute(relName, false));
} else if (relName.equals(":")) {
throw new LabelSyntaxException("':' is not a valid package-relative label");
} else if (relName.charAt(0) == ':') {
@@ -407,11 +459,12 @@ public final class Label implements Comparable<Label>, Serializable, SkylarkPrin
* <p>This is necessary so that dependency edges in remote repositories do not need to explicitly
* mention their repository name. Otherwise, referring to e.g. <code>//a:b</code> in a remote
* repository would point back to the main repository, which is usually not what is intended.
+ *
+ * <p>The return value will not be in the default repository.
*/
public Label resolveRepositoryRelative(Label relative) {
if (packageIdentifier.getRepository().isDefault()
- || !relative.packageIdentifier.getRepository().isDefault()
- || ABSOLUTE_PACKAGE_NAMES.contains(relative.getPackageIdentifier().getPackageFragment())) {
+ || !relative.packageIdentifier.getRepository().isDefault()) {
return relative;
} else {
try {
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/LabelSerializationProxy.java b/src/main/java/com/google/devtools/build/lib/cmdline/LabelSerializationProxy.java
index 5d7e6d0f93..c28e18565d 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/LabelSerializationProxy.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/LabelSerializationProxy.java
@@ -44,6 +44,6 @@ public class LabelSerializationProxy implements Externalizable {
}
private Object readResolve() {
- return Label.parseAbsoluteUnchecked(labelString);
+ return Label.parseAbsoluteUnchecked(labelString, false);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
index 4c995eb5cf..69fb31adb8 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/PackageIdentifier.java
@@ -60,19 +60,22 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
}
}
- // Temporary factory for identifiers without explicit repositories.
- // TODO(bazel-team): remove all usages of this.
+ /**
+ * This is only used by legacy callers. Actually creates the package identifier in the main
+ * repository, not the default one.
+ */
+ // TODO(lberki): Remove this method.
+ @Deprecated
public static PackageIdentifier createInDefaultRepo(String name) {
- return createInDefaultRepo(new PathFragment(name));
+ return create(MAIN_REPOSITORY_NAME, new PathFragment(name));
}
- public static PackageIdentifier createInDefaultRepo(PathFragment name) {
- try {
- return create(DEFAULT_REPOSITORY, name);
- } catch (LabelSyntaxException e) {
- throw new IllegalArgumentException("could not create package identifier for " + name
- + ": " + e.getMessage());
- }
+ public static PackageIdentifier createInMainRepo(String name) {
+ return createInMainRepo(new PathFragment(name));
+ }
+
+ public static PackageIdentifier createInMainRepo(PathFragment name) {
+ return create(MAIN_REPOSITORY_NAME, name);
}
/**
@@ -136,6 +139,14 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
return repository.getPathFragment().getRelative(pkgName);
}
+ public PackageIdentifier makeAbsolute() {
+ if (!repository.isDefault()) {
+ return this;
+ }
+
+ return create(MAIN_REPOSITORY_NAME, pkgName);
+ }
+
/**
* Returns the name of this package.
*
@@ -145,7 +156,7 @@ public final class PackageIdentifier implements Comparable<PackageIdentifier>, S
*/
@Override
public String toString() {
- return (repository.isDefault() ? "" : repository + "//") + pkgName;
+ return (repository.isDefault() || repository.isMain() ? "" : repository + "//") + pkgName;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
index 6f5811d58a..9a4e5a7ca1 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
@@ -178,6 +178,13 @@ public final class RepositoryName implements Serializable {
}
/**
+ * Returns if this is the default repository, that is, {@link #name} is "@".
+ */
+ public boolean isMain() {
+ return name.equals("@");
+ }
+
+ /**
* Returns the repository name, with leading "{@literal @}" (or "" for the default repository).
*/
// TODO(bazel-team): Use this over toString()- easier to track its usage.
@@ -189,7 +196,7 @@ public final class RepositoryName implements Serializable {
* Returns the path at which this repository is mapped within the exec root.
*/
public PathFragment getPathFragment() {
- return isDefault() || this.equals(PackageIdentifier.MAIN_REPOSITORY_NAME)
+ return isDefault() || isMain()
? PathFragment.EMPTY_FRAGMENT
: new PathFragment(Label.EXTERNAL_PATH_PREFIX).getRelative(strippedName());
}
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 f8c1a83525..c405efad0e 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
@@ -270,7 +270,7 @@ public abstract class TargetPattern implements Serializable {
Preconditions.checkArgument(excludedSubdirectories.isEmpty(),
"Target pattern \"%s\" of type %s cannot be evaluated with excluded subdirectories: %s.",
getOriginalPattern(), getType(), excludedSubdirectories);
- if (resolver.isPackage(PackageIdentifier.createInDefaultRepo(path))) {
+ if (resolver.isPackage(PackageIdentifier.createInMainRepo(path))) {
// User has specified a package name. lookout for default target.
callback.process(resolver.getExplicitTarget(label("//" + path)).getTargets());
} else {
@@ -281,7 +281,7 @@ public abstract class TargetPattern implements Serializable {
// first BUILD file is found (i.e. longest prefix match).
for (int i = pieces.size() - 1; i > 0; i--) {
String packageName = SLASH_JOINER.join(pieces.subList(0, i));
- if (resolver.isPackage(PackageIdentifier.createInDefaultRepo(packageName))) {
+ if (resolver.isPackage(PackageIdentifier.createInMainRepo(packageName))) {
String targetName = SLASH_JOINER.join(pieces.subList(i, pieces.size()));
callback.process(
resolver
@@ -304,7 +304,7 @@ public abstract class TargetPattern implements Serializable {
public PackageIdentifier getDirectory() {
int lastSlashIndex = path.lastIndexOf('/');
// The package name cannot be illegal because we verified it during target parsing
- return PackageIdentifier.createInDefaultRepo(
+ return PackageIdentifier.createInMainRepo(
lastSlashIndex < 0 ? "" : path.substring(0, lastSlashIndex));
}
@@ -591,7 +591,7 @@ public abstract class TargetPattern implements Serializable {
String originalPattern = pattern;
final boolean includesRepo = pattern.startsWith("@");
- RepositoryName repository = PackageIdentifier.DEFAULT_REPOSITORY_NAME;
+ RepositoryName repository = null;
if (includesRepo) {
int pkgStart = pattern.indexOf("//");
if (pkgStart < 0) {
@@ -638,6 +638,14 @@ public abstract class TargetPattern implements Serializable {
+ "' should not end in a slash");
}
+ if (repository == null) {
+ if (packagePart.startsWith(Label.EXTERNAL_PACKAGE_NAME.toString())) {
+ repository = PackageIdentifier.DEFAULT_REPOSITORY_NAME;
+ } else {
+ repository = PackageIdentifier.MAIN_REPOSITORY_NAME;
+ }
+ }
+
if (packagePart.endsWith("/...")) {
String realPackagePart = removeSuffix(packagePart, "/...");
PackageIdentifier packageIdentifier;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
index 993113ad8c..96a20fb964 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
@@ -114,7 +114,7 @@ public class AggregatingAttributeMapper extends AbstractAttributeMapper {
for (Object value : visitAttribute(attribute.getName(), attribute.getType())) {
if (value != null) {
for (Label label : extractLabels(type, value)) {
- observer.acceptLabelAttribute(label, attribute);
+ observer.acceptLabelAttribute(getLabel().resolveRepositoryRelative(label), attribute);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
index 875d9dcb33..9d2af18fb9 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AspectDefinition.java
@@ -29,7 +29,6 @@ import com.google.devtools.build.lib.util.Preconditions;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -196,13 +195,15 @@ public final class AspectDefinition {
continue;
}
if (aspectAttribute.getType() == BuildType.LABEL) {
- Label label = BuildType.LABEL.cast(aspectAttribute.getDefaultValue(from));
+ Label label = from.getLabel().resolveRepositoryRelative(
+ BuildType.LABEL.cast(aspectAttribute.getDefaultValue(from)));
if (label != null) {
labelBuilder.put(aspectAttribute, label);
}
} else if (aspectAttribute.getType() == BuildType.LABEL_LIST) {
- List<Label> labelList = BuildType.LABEL_LIST.cast(aspectAttribute.getDefaultValue(from));
- labelBuilder.putAll(aspectAttribute, labelList);
+ for (Label label : BuildType.LABEL_LIST.cast(aspectAttribute.getDefaultValue(from))) {
+ labelBuilder.put(aspectAttribute, from.getLabel().resolveRepositoryRelative(label));
+ }
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 9181d761e8..d2f70902ec 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -699,7 +699,7 @@ public final class PackageFactory {
inputFile.getName()));
}
if (license == null && pkgBuilder.getDefaultLicense() == License.NO_LICENSE
- && pkgBuilder.getBuildFileLabel().toString().startsWith("//third_party/")) {
+ && RuleClass.isThirdPartyPackage(pkgBuilder.getPackageIdentifier())) {
throw new EvalException(ast.getLocation(),
"third-party file '" + inputFile.getName() + "' lacks a license declaration "
+ "with one of the following types: notice, reciprocal, permissive, "
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java b/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java
index f7e3aedfd5..144dc8903f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RelativePackageNameResolver.java
@@ -58,7 +58,7 @@ public class RelativePackageNameResolver {
relativePkg = pkg.substring(2);
} else if (pkg.startsWith("/")) {
throw new InvalidPackageNameException(
- PackageIdentifier.createInDefaultRepo(pkg),
+ PackageIdentifier.createInMainRepo(pkg),
"package name cannot start with a single slash");
} else {
isAbsolute = false;
@@ -75,7 +75,7 @@ public class RelativePackageNameResolver {
result = result.normalize();
if (result.containsUplevelReferences()) {
throw new InvalidPackageNameException(
- PackageIdentifier.createInDefaultRepo(pkg),
+ PackageIdentifier.createInMainRepo(pkg),
"package name contains too many '..' segments");
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 8064936556..9accac3899 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Ordering;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.BuildType.SelectorList;
@@ -103,6 +104,9 @@ import javax.annotation.concurrent.Immutable;
public final class RuleClass {
public static final Function<? super Rule, Map<String, Label>> NO_EXTERNAL_BINDINGS =
Functions.<Map<String, Label>>constant(ImmutableMap.<String, Label>of());
+
+ private static final PathFragment THIRD_PARTY_PREFIX = new PathFragment("third_party");
+
/**
* A constraint for the package name of the Rule instances.
*/
@@ -1540,7 +1544,7 @@ public final class RuleClass {
*/
private static void checkThirdPartyRuleHasLicense(Rule rule,
Package.Builder pkgBuilder, EventHandler eventHandler) {
- if (rule.getLabel().getPackageName().startsWith("third_party/")) {
+ if (isThirdPartyPackage(rule.getLabel().getPackageIdentifier())) {
License license = rule.getLicense();
if (license == null) {
license = pkgBuilder.getDefaultLicense();
@@ -1778,4 +1782,20 @@ public final class RuleClass {
public boolean outputsDefaultExecutable() {
return outputsDefaultExecutable;
}
+
+ public static boolean isThirdPartyPackage(PackageIdentifier packageIdentifier) {
+ if (!packageIdentifier.getRepository().isMain()) {
+ return false;
+ }
+
+ if (!packageIdentifier.getPackageFragment().startsWith(THIRD_PARTY_PREFIX)) {
+ return false;
+ }
+
+ if (packageIdentifier.getPackageFragment().segmentCount() <= 1) {
+ return false;
+ }
+
+ return true;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
index a187ca9116..ff4dff418e 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageCacheOptions.java
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.pkgcache;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.Constants;
import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -186,4 +187,15 @@ public class PackageCacheOptions extends OptionsBase {
}
}
+
+ public ImmutableSet<PackageIdentifier> getDeletedPackages() {
+ if (deletedPackages == null) {
+ return ImmutableSet.of();
+ }
+ ImmutableSet.Builder<PackageIdentifier> newDeletedPackages = ImmutableSet.builder();
+ for (PackageIdentifier pkg : deletedPackages) {
+ newDeletedPackages.add(pkg.makeAbsolute());
+ }
+ return newDeletedPackages.build();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
index 93a5e01357..f00606daf4 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.pkgcache;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -98,9 +99,10 @@ public class PathPackageLocator implements Serializable {
*/
public Path getPackageBuildFileNullable(PackageIdentifier packageIdentifier,
AtomicReference<? extends UnixGlob.FilesystemCalls> cache) {
- if (packageIdentifier.getRepository().isDefault()) {
+ Preconditions.checkArgument(!packageIdentifier.getRepository().isDefault());
+ if (packageIdentifier.getRepository().isMain()) {
return getFilePath(packageIdentifier.getPackageFragment().getRelative("BUILD"), cache);
- } else if (!packageIdentifier.getRepository().isDefault()) {
+ } else {
Verify.verify(outputBase != null, String.format(
"External package '%s' needs to be loaded but this PathPackageLocator instance does not "
+ "support external packages", packageIdentifier));
@@ -116,8 +118,6 @@ public class PathPackageLocator implements Serializable {
} else {
return null;
}
- } else {
- return null;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java
index 413eb1c166..d00db1e1e7 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetPatternResolverUtil.java
@@ -60,7 +60,7 @@ public final class TargetPatternResolverUtil {
if (LabelValidator.validatePackageName(packageName) != null) {
throw new TargetParsingException("'" + packageName + "' is not a valid package name");
}
- if (!resolver.isPackage(PackageIdentifier.createInDefaultRepo(packageName))) {
+ if (!resolver.isPackage(PackageIdentifier.createInMainRepo(packageName))) {
throw new TargetParsingException(
TargetPatternResolverUtil.getParsingErrorMessage(
"no such package '" + packageName + "': BUILD file not found on package path",
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index f5186c85d3..3e96693be4 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -773,7 +773,7 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target> {
Map<SkyKey, PathFragment> keys = new HashMap<>();
for (PathFragment pathFragment : currentToOriginal.keySet()) {
keys.put(
- PackageLookupValue.key(PackageIdentifier.createInDefaultRepo(pathFragment)),
+ PackageLookupValue.key(PackageIdentifier.createInMainRepo(pathFragment)),
pathFragment);
}
Map<SkyKey, SkyValue> lookupValues = graph.getSuccessfulValues(keys.keySet());
diff --git a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
index a4cc45d0f9..4949acda8f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java
@@ -229,7 +229,7 @@ public abstract class OutputFormatter implements Serializable {
out.print(target.getTargetKind());
out.print(' ');
}
- out.println(target.getLabel());
+ out.println(target.getLabel().getDefaultCanonicalForm());
}
}
};
@@ -306,7 +306,8 @@ public abstract class OutputFormatter implements Serializable {
throws IOException, InterruptedException {
for (Target target : partialResult) {
Location location = target.getLocation();
- out.println(location.print() + ": " + target.getTargetKind() + " " + target.getLabel());
+ out.println(location.print() + ": " + target.getTargetKind()
+ + " " + target.getLabel().getDefaultCanonicalForm());
}
}
};
@@ -348,7 +349,7 @@ public abstract class OutputFormatter implements Serializable {
Object value = Iterables.getOnlyElement(values.first);
out.printf(" %s = ", attr.getPublicName());
if (value instanceof Label) {
- value = value.toString();
+ value = ((Label) value).getDefaultCanonicalForm();
} else if (value instanceof List<?> && EvalUtils.isImmutable(value)) {
// Display it as a list (and not as a tuple). Attributes can never be tuples.
value = new ArrayList<>((List<?>) value);
@@ -398,7 +399,7 @@ public abstract class OutputFormatter implements Serializable {
@Override
public String toString() {
- return rank + " " + label;
+ return rank + " " + label.getDefaultCanonicalForm();
}
}
@@ -423,7 +424,7 @@ public abstract class OutputFormatter implements Serializable {
if (toSave != null) {
toSave.add(new RankAndLabel(rank, label));
} else {
- out.println(rank + " " + label);
+ out.println(rank + " " + label.getDefaultCanonicalForm());
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
index 339592ed3c..38f73c13ea 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleClassFunctions.java
@@ -170,7 +170,7 @@ public class SkylarkRuleClassFunctions {
@Override
public Label load(String from) throws Exception {
try {
- return Label.parseAbsolute(from);
+ return Label.parseAbsolute(from, false);
} catch (LabelSyntaxException e) {
throw new Exception(from);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
index 81fc5732d0..65a300ce66 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java
@@ -629,7 +629,8 @@ public class JavaCompileAction extends AbstractAction {
}
if (targetLabel != null) {
result.add("--target_label");
- if (targetLabel.getPackageIdentifier().getRepository().isDefault()) {
+ if (targetLabel.getPackageIdentifier().getRepository().isDefault()
+ || targetLabel.getPackageIdentifier().getRepository().isMain()) {
result.add(targetLabel.toString());
} else {
// @-prefixed strings will be assumed to be filenames and expanded by
@@ -677,6 +678,7 @@ public class JavaCompileAction extends AbstractAction {
Label label = getTargetName(jar);
builder.add(
label.getPackageIdentifier().getRepository().isDefault()
+ || label.getPackageIdentifier().getRepository().isMain()
? label.toString()
// Escape '@' prefix for .params file.
: "@" + label);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
index 02b2a34cfe..787fb7fe4d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileActionBuilder.java
@@ -315,7 +315,8 @@ public class JavaHeaderCompileActionBuilder {
}
if (targetLabel != null) {
result.add("--target_label");
- if (targetLabel.getPackageIdentifier().getRepository().isDefault()) {
+ if (targetLabel.getPackageIdentifier().getRepository().isDefault()
+ || targetLabel.getPackageIdentifier().getRepository().isMain()) {
result.add(targetLabel.toString());
} else {
// @-prefixed strings will be assumed to be params filenames and expanded,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
index 4ed2341fa2..baae5551e1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeProvider.java
@@ -513,7 +513,7 @@ public final class XcodeProvider implements TransitiveInfoProvider {
private static String xcodeTargetName(Label label, String labelSuffix) {
String pathFromWorkspaceRoot = label + labelSuffix;
- if (label.getPackageIdentifier().getRepository().isDefault()) {
+ if (label.getPackageIdentifier().getRepository().isMain()) {
pathFromWorkspaceRoot = pathFromWorkspaceRoot.replace("//", "")
.replace(':', '/');
} else {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index c14358173b..8b37d9f933 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -274,7 +274,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
path.getParentDirectory(), "Must pass in files, not root directory");
Preconditions.checkArgument(!parent.isAbsolute(), path);
SkyKey depKey =
- ContainingPackageLookupValue.key(PackageIdentifier.createInDefaultRepo(parent));
+ ContainingPackageLookupValue.key(PackageIdentifier.createInMainRepo(parent));
depKeys.put(path, depKey);
keysRequested.add(depKey);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
index ffee11cffb..0405f63c24 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
@@ -39,6 +39,7 @@ public abstract class ContainingPackageLookupValue implements SkyValue {
public static SkyKey key(PackageIdentifier id) {
Preconditions.checkArgument(!id.getPackageFragment().isAbsolute(), id);
+ Preconditions.checkArgument(!id.getRepository().isDefault(), id);
return SkyKey.create(SkyFunctions.CONTAINING_PACKAGE_LOOKUP, id);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
index 8045c59c96..92888d2427 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
@@ -120,7 +120,7 @@ public final class EnvironmentBackedRecursivePackageProvider implements Recursiv
}
List<Path> roots = new ArrayList<>();
- if (repository.isDefault()) {
+ if (repository.isMain()) {
roots.addAll(packageLocator.getPathEntries());
} else {
RepositoryDirectoryValue repositoryValue =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
index 5703c42283..a306f4fe94 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
@@ -171,7 +171,7 @@ public final class GraphBackedRecursivePackageProvider implements RecursivePacka
}
List<Path> roots = new ArrayList<>();
- if (repository.isDefault()) {
+ if (repository.isMain()) {
roots.addAll(pkgPath.getPathEntries());
} else {
RepositoryDirectoryValue repositoryValue =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index 40210495c4..90aee2df45 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -569,6 +569,8 @@ public class PackageFunction implements SkyFunction {
Environment env,
SkylarkImportLookupFunction skylarkImportLookupFunctionForInlining)
throws PackageFunctionException, InterruptedException {
+ Preconditions.checkArgument(!packageId.getRepository().isDefault());
+
ImmutableList<SkylarkImport> imports = buildFileAST.getImports();
Map<String, Extension> importMap = Maps.newHashMapWithExpectedSize(imports.size());
ImmutableList.Builder<SkylarkFileDependency> fileDependencies = ImmutableList.builder();
@@ -803,7 +805,7 @@ public class PackageFunction implements SkyFunction {
- label.getPackageFragment().segmentCount(),
labelNameFragment.segmentCount());
message += " (perhaps you meant to put the colon here: '";
- if (containingPkg.getRepository().isDefault()) {
+ if (containingPkg.getRepository().isDefault() || containingPkg.getRepository().isMain()) {
message += "//";
}
message += containingPkg + ":" + labelNameInContainingPackage + "'?)";
@@ -1245,7 +1247,7 @@ public class PackageFunction implements SkyFunction {
}
static boolean isDefaultsPackage(PackageIdentifier packageIdentifier) {
- return packageIdentifier.getRepository().isDefault()
+ return packageIdentifier.getRepository().isMain()
&& packageIdentifier.getPackageFragment().equals(DEFAULTS_PACKAGE_NAME);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index 9a53dd317b..e4d9dd50df 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -54,8 +54,7 @@ public class PackageLookupFunction implements SkyFunction {
return PackageLookupValue.success(pkgLocator.getPathEntries().get(0));
}
- if (!packageKey.getRepository().equals(PackageIdentifier.MAIN_REPOSITORY_NAME)
- && !packageKey.getRepository().isDefault()) {
+ if (!packageKey.getRepository().isMain()) {
return computeExternalPackageLookupValue(skyKey, env, packageKey);
} else if (packageKey.equals(Label.EXTERNAL_PACKAGE_IDENTIFIER)) {
return computeWorkspaceLookupValue(env, packageKey);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
index 9460b853bd..e9d5bf5100 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
@@ -93,10 +93,11 @@ public abstract class PackageLookupValue implements SkyValue {
static SkyKey key(PathFragment directory) {
Preconditions.checkArgument(!directory.isAbsolute(), directory);
- return key(PackageIdentifier.createInDefaultRepo(directory));
+ return key(PackageIdentifier.createInMainRepo(directory));
}
public static SkyKey key(PackageIdentifier pkgIdentifier) {
+ Preconditions.checkArgument(!pkgIdentifier.getRepository().isDefault());
return SkyKey.create(SkyFunctions.PACKAGE_LOOKUP, pkgIdentifier);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java
index 840a4c8ec2..d637a7fecf 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageValue.java
@@ -54,6 +54,7 @@ public class PackageValue implements NotComparableSkyValue {
}
public static SkyKey key(PackageIdentifier pkgIdentifier) {
+ Preconditions.checkArgument(!pkgIdentifier.getRepository().isDefault());
return SkyKey.create(SkyFunctions.PACKAGE, pkgIdentifier);
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
index 2261b77878..9caa115f4a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
@@ -223,7 +223,7 @@ public class PrepareDepsOfPatternFunction implements SkyFunction {
rulesOnly ? FilteringPolicies.RULES_ONLY : FilteringPolicies.NO_FILTER;
PathFragment pathFragment = TargetPatternResolverUtil.getPathFragment(directory);
List<Path> roots = new ArrayList<>();
- if (repository.isDefault()) {
+ if (repository.isMain()) {
roots.addAll(pkgPath.getPathEntries());
} else {
RepositoryDirectoryValue repositoryValue =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
index ce9a912cdf..a32e88b7a5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveDirectoryTraversalFunction.java
@@ -152,7 +152,7 @@ abstract class RecursiveDirectoryTraversalFunction
PackageIdentifier packageId = PackageIdentifier.create(
recursivePkgKey.getRepository(), rootRelativePath);
- if (packageId.getRepository().isDefault()
+ if ((packageId.getRepository().isDefault() || packageId.getRepository().isMain())
&& fileValue.isSymlink()
&& fileValue.getUnresolvedLinkTarget().startsWith(directories.getOutputBase().asFragment())) {
// Symlinks back to the output base are not traversed so that we avoid convenience symlinks.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
index b318519163..9bec1eeb25 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
@@ -85,6 +85,7 @@ public class RecursivePkgValue implements SkyValue {
ImmutableSet<PathFragment> excludedPaths) {
PathFragment.checkAllPathsAreUnder(excludedPaths,
rootedPath.getRelativePath());
+ Preconditions.checkState(!repositoryName.isDefault());
this.repositoryName = repositoryName;
this.rootedPath = Preconditions.checkNotNull(rootedPath);
this.excludedPaths = Preconditions.checkNotNull(excludedPaths);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index f4ece81d97..b948490519 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -710,7 +710,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
execPath.getParentDirectory(), "Must pass in files, not root directory");
Preconditions.checkArgument(!parent.isAbsolute(), execPath);
packageKeys.add(ContainingPackageLookupValue.key(
- PackageIdentifier.createInDefaultRepo(parent)));
+ PackageIdentifier.createInMainRepo(parent)));
}
EvaluationResult<ContainingPackageLookupValue> result;
@@ -736,7 +736,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
Map<PathFragment, Root> roots = new HashMap<>();
for (PathFragment execPath : execPaths) {
ContainingPackageLookupValue value = result.get(ContainingPackageLookupValue.key(
- PackageIdentifier.createInDefaultRepo(execPath.getParentDirectory())));
+ PackageIdentifier.createInMainRepo(execPath.getParentDirectory())));
if (value.hasContainingPackage()) {
roots.put(execPath, Root.asSourceRoot(value.getContainingPackageRoot()));
} else {
@@ -1552,6 +1552,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
* Returns whether the given package should be consider deleted and thus should be ignored.
*/
public boolean isPackageDeleted(PackageIdentifier packageName) {
+ Preconditions.checkState(!packageName.getRepository().isDefault(),
+ "package must be absolute: %s", packageName);
return deletedPackages.get().contains(packageName);
}
@@ -1586,7 +1588,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
workingDirectory),
packageCacheOptions.defaultVisibility, packageCacheOptions.showLoadingProgress,
packageCacheOptions.globbingThreads, defaultsPackageContents, commandId);
- setDeletedPackages(ImmutableSet.copyOf(packageCacheOptions.deletedPackages));
+ setDeletedPackages(packageCacheOptions.getDeletedPackages());
incrementalBuildMonitor = new SkyframeIncrementalBuildMonitor();
invalidateTransientErrors();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
index 2b1f76c2d4..47ee3efcac 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupFunction.java
@@ -232,7 +232,7 @@ public class SkylarkImportLookupFunction implements SkyFunction {
for (PathFragment importPath : pathsToLookup) {
PathFragment relativeImportPath = importPath.toRelative();
PackageIdentifier pkgToLookUp =
- PackageIdentifier.createInDefaultRepo(relativeImportPath.getParentDirectory());
+ PackageIdentifier.createInMainRepo(relativeImportPath.getParentDirectory());
lookupMap.put(ContainingPackageLookupValue.key(pkgToLookUp), importPath);
}
@@ -303,6 +303,8 @@ public class SkylarkImportLookupFunction implements SkyFunction {
static ImmutableMap<String, Label> findLabelsForLoadStatements(
ImmutableCollection<SkylarkImport> imports, Label containingFileLabel, Environment env)
throws SkylarkImportFailedException {
+ Preconditions.checkArgument(
+ !containingFileLabel.getPackageIdentifier().getRepository().isDefault());
Map<String, Label> outputMap = Maps.newHashMapWithExpectedSize(imports.size());
// Filter relative vs. absolute paths.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupValue.java
index 2fbaf10baa..201e8fcab5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkImportLookupValue.java
@@ -69,6 +69,7 @@ public class SkylarkImportLookupValue implements SkyValue {
public SkylarkImportLookupKey(Label importLabel, boolean inWorkspace) {
Preconditions.checkNotNull(importLabel);
+ Preconditions.checkArgument(!importLabel.getPackageIdentifier().getRepository().isDefault());
this.importLabel = importLabel;
this.inWorkspace = inWorkspace;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java
index 9c39849040..f1aa03dadc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetMarkerValue.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.skyframe;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -45,6 +46,7 @@ public final class TargetMarkerValue implements SkyValue {
@ThreadSafe
public static SkyKey key(Label label) {
+ Preconditions.checkArgument(!label.getPackageIdentifier().getRepository().isDefault());
return SkyKey.create(SkyFunctions.TARGET_MARKER, label);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java
index d8e9b26798..6fb4fcf059 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetValue.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
+import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -170,6 +171,7 @@ public class TransitiveTargetValue implements SkyValue {
@ThreadSafe
public static SkyKey key(Label label) {
+ Preconditions.checkArgument(!label.getPackageIdentifier().getRepository().isDefault());
return SkyKey.create(SkyFunctions.TRANSITIVE_TARGET, label);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
index 59252d8f3f..2070ff2b66 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
@@ -125,6 +125,7 @@ public class TransitiveTraversalValue implements SkyValue {
@ThreadSafe
public static SkyKey key(Label label) {
+ Preconditions.checkArgument(!label.getPackageIdentifier().getRepository().isDefault());
return SkyKey.create(SkyFunctions.TRANSITIVE_TRAVERSAL, label);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 8536558087..ea6f4dc544 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -16,7 +16,7 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
-import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Package.LegacyBuilder;
import com.google.devtools.build.lib.packages.Package.NameConflictException;
@@ -44,6 +44,7 @@ public class WorkspaceFileFunction implements SkyFunction {
private final PackageFactory packageFactory;
private final BlazeDirectories directories;
private final RuleClassProvider ruleClassProvider;
+ private static final PackageIdentifier rootPackage = PackageIdentifier.createInMainRepo("");
public WorkspaceFileFunction(
RuleClassProvider ruleClassProvider,
@@ -105,7 +106,7 @@ public class WorkspaceFileFunction implements SkyFunction {
BuildFileAST ast = workspaceASTValue.getASTs().get(key.getIndex());
PackageFunction.SkylarkImportResult importResult =
PackageFunction.fetchImportsFromBuildFile(
- repoWorkspace, Label.EXTERNAL_PACKAGE_IDENTIFIER, ast, env, null);
+ repoWorkspace, rootPackage, ast, env, null);
if (importResult == null) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java
index 2edd38fc3b..8a1bb7eaf5 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkImports.java
@@ -210,7 +210,7 @@ public class SkylarkImports {
// Absolute label.
Label importLabel;
try {
- importLabel = Label.parseAbsolute(importString);
+ importLabel = Label.parseAbsolute(importString, false);
} catch (LabelSyntaxException e) {
throw new SkylarkImportSyntaxException(INVALID_LABEL_PREFIX + e.getMessage());
}