(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.
    */