Change message about cycles in the WORKSPACE file
If a cycle is detected in the WORKSPACE file, i.e., a definition of a repository
is needed but not found till the place it is needed in the WORKSPACE file, this
can have two reasons,
- the definition could come later in the WORKSPACE file, or
- it could be missing completely.
Bazel has no chance of distinguishing those two cases, as the semantics of the
WORKSPACE file after this point depends on the not-found definition of the repository. So,
report both possibilities in the error message.
Closes #5697.
Change-Id: I92ff037c8b41c1fd78329db53800d11635b2e6e1
PiperOrigin-RevId: 234809390
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkModuleCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkModuleCycleReporter.java
index 7b6789c..71035b4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkModuleCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkylarkModuleCycleReporter.java
@@ -118,9 +118,13 @@
+ fileLabel
+ "'.\n"
+ "It usually happens when the repository is not defined prior to being used.\n"
- + "Maybe repository '"
+ + "This could either mean you have to add the '"
+ + fileLabel.getWorkspaceName()
+ + "' repository with a statement like `http_archive` in your WORKSPACE file"
+ + " (note that transitive dependencies are not added automatically), or"
+ + " the repository '"
+ repositoryName
- + "' was defined later in your WORKSPACE file?"));
+ + "' was defined too late in your WORKSPACE file."));
return true;
} else if (Iterables.any(cycle, IS_PACKAGE_LOOKUP)) {
eventHandler.handle(
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
index cd3eb21..4daa6b8 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
@@ -255,7 +255,7 @@
// This is expected
}
assertDoesNotContainEvent("cycle");
- assertContainsEvent("Maybe repository 'foo' was defined later in your WORKSPACE file?");
+ assertContainsEvent("repository 'foo' was defined too late in your WORKSPACE file");
assertContainsEvent("Failed to load Starlark extension '@foo//:def.bzl'.");
}
@@ -279,7 +279,7 @@
// This is expected
}
assertDoesNotContainEvent("cycle");
- assertContainsEvent("Maybe repository 'foo' was defined later in your WORKSPACE file?");
+ assertContainsEvent("the repository 'foo' was defined too late in your WORKSPACE file");
assertContainsEvent("Failed to load Starlark extension '@foo//:def.bzl'.");
}
@@ -307,8 +307,7 @@
.contains(
"Failed to load Starlark extension "
+ "'@git_repo//xyz:foo.bzl'.\n"
- + "It usually happens when the repository is not defined prior to being used.\n"
- + "Maybe repository 'git_repo' was defined later in your WORKSPACE file?");
+ + "It usually happens when the repository is not defined prior to being used.\n");
}
}
diff --git a/src/test/shell/bazel/skylark_repository_test.sh b/src/test/shell/bazel/skylark_repository_test.sh
index 9708190..f1e9c9b 100755
--- a/src/test/shell/bazel/skylark_repository_test.sh
+++ b/src/test/shell/bazel/skylark_repository_test.sh
@@ -294,7 +294,7 @@
expect_not_log "PACKAGE"
expect_log "Failed to load Starlark extension '@foo//:ext.bzl'"
- expect_log "Maybe repository 'foo' was defined later in your WORKSPACE file?"
+ expect_log "repository 'foo' was defined too late in your WORKSPACE file"
}
function test_load_nonexistent_with_subworkspace() {
@@ -313,7 +313,7 @@
expect_not_log "PACKAGE"
expect_log "Failed to load Starlark extension '@does_not_exist//:random.bzl'"
- expect_log "Maybe repository 'does_not_exist' was defined later in your WORKSPACE file?"
+ expect_log "repository 'does_not_exist' was defined too late in your WORKSPACE file"
# Retest with query //...
bazel clean --expunge
@@ -322,7 +322,7 @@
expect_not_log "PACKAGE"
expect_log "Failed to load Starlark extension '@does_not_exist//:random.bzl'"
- expect_log "Maybe repository 'does_not_exist' was defined later in your WORKSPACE file?"
+ expect_log "repository 'does_not_exist' was defined too late in your WORKSPACE file"
}
function test_skylark_local_repository() {