Allow labels in the '--aspects' parameter.
--
MOS_MIGRATED_REVID=139573590
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index b29d2a2..5cd90d2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -75,6 +75,9 @@
import com.google.devtools.build.lib.skyframe.SkyframeBuildView;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkImport;
+import com.google.devtools.build.lib.syntax.SkylarkImports;
+import com.google.devtools.build.lib.syntax.SkylarkImports.SkylarkImportSyntaxException;
import com.google.devtools.build.lib.util.OrderedSetMultimap;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.RegexFilter;
@@ -465,7 +468,22 @@
// TODO(jfield): For consistency with Skylark loads, the aspect should be specified
// as an absolute path. Also, we probably need to do at least basic validation of
// path well-formedness here.
- PathFragment bzlFile = new PathFragment("/" + aspect.substring(0, delimiterPosition));
+ String bzlFileLoadLikeString = aspect.substring(0, delimiterPosition);
+ if (!bzlFileLoadLikeString.startsWith("//") && !bzlFileLoadLikeString.startsWith("@")) {
+ // "Legacy" behavior of '--aspects' parameter.
+ bzlFileLoadLikeString = new PathFragment("/" + bzlFileLoadLikeString).toString();
+ if (bzlFileLoadLikeString.endsWith(".bzl")) {
+ bzlFileLoadLikeString = bzlFileLoadLikeString.substring(0,
+ bzlFileLoadLikeString.length() - ".bzl".length());
+ }
+ }
+ SkylarkImport skylarkImport;
+ try {
+ skylarkImport = SkylarkImports.create(bzlFileLoadLikeString);
+ } catch (SkylarkImportSyntaxException e) {
+ throw new ViewCreationFailedException(
+ String.format("Invalid aspect '%s': %s", aspect, e.getMessage()), e);
+ }
String skylarkFunctionName = aspect.substring(delimiterPosition + 1);
for (TargetAndConfiguration targetSpec : topLevelTargetsWithConfigs) {
@@ -479,7 +497,7 @@
// aspect and the base target while the top-level configuration is untrimmed.
targetSpec.getConfiguration(),
targetSpec.getConfiguration(),
- bzlFile,
+ skylarkImport,
skylarkFunctionName));
}
} else {