aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mschaller <mschaller@google.com>2017-06-22 00:11:44 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-06-22 12:45:45 +0200
commit3c566c6697a3a0e574f0cc7da2da9fb16be35cb7 (patch)
treed8d0abf6d5ca5cac6d76a0a9f5059265159fb22a
parent21a01ff03f3dd817bd7bba52b9b3b8c81c49cde6 (diff)
Use targets' labels' package identifier for query output=package
Subinclude targets' packages are the package containing the load statement. Subinclude targets' labels are the bzl files they refer to. The latter has the appropriate package to display for --output=package. Fixes #3122. PiperOrigin-RevId: 159750840
-rw-r--r--site/docs/query.html5
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/output/OutputFormatter.java2
-rwxr-xr-xsrc/test/shell/bazel/local_repository_test.sh29
3 files changed, 35 insertions, 1 deletions
diff --git a/site/docs/query.html b/site/docs/query.html
index 5eb8885357..86b4318e18 100644
--- a/site/docs/query.html
+++ b/site/docs/query.html
@@ -1225,6 +1225,11 @@ maxrank
</p>
<p>
+ Packages in external repositories are formatted as
+ <code>@repo//foo/bar</code> while packages in the main repository are
+ formatted as <code>foo/bar</code>.
+</p>
+<p>
In conjunction with the <code>deps(...)</code> query, this output
option can be used to find the set of packages that must be checked
out in order to build a given set of targets.
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 3fb451adff..48923a3e83 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
@@ -344,7 +344,7 @@ public abstract class OutputFormatter implements Serializable {
public void processOutput(Iterable<Target> partialResult) {
for (Target target : partialResult) {
- packageNames.add(target.getLabel().getPackageName());
+ packageNames.add(target.getLabel().getPackageIdentifier().toString());
}
}
diff --git a/src/test/shell/bazel/local_repository_test.sh b/src/test/shell/bazel/local_repository_test.sh
index bc3a08a46e..d802af5d66 100755
--- a/src/test/shell/bazel/local_repository_test.sh
+++ b/src/test/shell/bazel/local_repository_test.sh
@@ -427,6 +427,35 @@ EOF
expect_log "//external:my_repo"
}
+function test_repository_package_query() {
+ mkdir a b b/b
+ echo "local_repository(name='b', path='b')" > WORKSPACE
+ echo "sh_library(name='a', deps=['@b//b'])" > a/BUILD
+ touch b/WORKSPACE
+ echo "sh_library(name='b')" > b/b/BUILD
+ bazel query --output package "deps(//a)" >& $TEST_log || fail "query failed"
+ expect_log "a"
+ expect_log "@b//b"
+}
+
+function test_repository_buildfiles_package_query() {
+ mkdir a b b/b b/c
+ echo "local_repository(name='b', path='b')" > WORKSPACE
+ echo "sh_library(name='a', deps=['@b//b'])" > a/BUILD
+ touch b/WORKSPACE b/c/BUILD
+ cat > b/b/BUILD <<EOF
+load('//c:lib.bzl', 'x')
+sh_library(
+ name = "b"
+)
+EOF
+ echo "x = 2" > b/c/lib.bzl
+ bazel query --output package "buildfiles(deps(//a))" >& $TEST_log || fail "query failed"
+ expect_log "a"
+ expect_log "@b//b"
+ expect_log "@b//c"
+}
+
function test_warning() {
local bar=$TEST_TMPDIR/bar
rm -rf "$bar"