(Skydoc) Handle cross-repository dependencies
RELNOTES: None.
PiperOrigin-RevId: 209029649
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index 2a0bf3d..53a87d5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -230,7 +230,8 @@
private Environment recursiveEval(
Label label, List<RuleInfo> ruleInfoList)
throws InterruptedException, IOException, LabelSyntaxException {
- Path path = Paths.get(label.toPathFragment().toString());
+ Path path = pathOfLabel(label);
+
if (pending.contains(path)) {
throw new IllegalStateException("cycle with " + path);
} else if (loaded.containsKey(path)) {
@@ -244,7 +245,6 @@
Map<String, Extension> imports = new HashMap<>();
for (SkylarkImport anImport : buildFileAST.getImports()) {
Label relativeLabel = label.getRelative(anImport.getImportString());
- Path importPath = Paths.get(relativeLabel.toPathFragment().toString());
try {
Environment importEnv = recursiveEval(relativeLabel, ruleInfoList);
@@ -252,7 +252,7 @@
} catch (NoSuchFileException noSuchFileException) {
throw new IllegalStateException(
String.format("File %s imported '%s', yet %s was not found.",
- path, anImport.getImportString(), importPath));
+ path, anImport.getImportString(), pathOfLabel(relativeLabel)));
}
}
@@ -264,6 +264,14 @@
return env;
}
+ private Path pathOfLabel(Label label) {
+ String workspacePrefix = label.getWorkspaceRoot().isEmpty()
+ ? ""
+ : label.getWorkspaceRoot() + "/";
+
+ return Paths.get(workspacePrefix + label.toPathFragment());
+ }
+
/**
* Evaluates the AST from a single skylark file, given the already-resolved imports.
*/