aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/shell/integration/execution_phase_tests.sh
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-08-14 21:38:51 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-14 21:40:26 -0700
commit7574d84e61086b5835a2b2cc003ca72fcfcf4fe4 (patch)
treec1fdc7992d6ffe9168112e5474917b0cb854a7c7 /src/test/shell/integration/execution_phase_tests.sh
parent8dece49bed76b5f372ff5d3a3f25a32b2a9c1f52 (diff)
Filter out events from analysis when constructing execution-phase values in Skyframe.
This avoids some unnecessary iteration over already-emitted events that can show up in profiles, and allows us to store execution-phase values a bit more compactly, since we don't need to carry around wrapper objects and nested sets everywhere. This crucially depends on the fact that we can't build a target in the execution phase without first having analyzed it in a separate Skyframe call. Skyframe normally propagates all events/posts up the graph because it must be able to emit them if a user requests a node that only transitively depends on the node that emitted an event. However, because we do analysis in a separate Skyframe call, any warnings/posts associated with the analysis nodes will be emitted then, and we don't need to propagate them into execution. PiperOrigin-RevId: 208767078
Diffstat (limited to 'src/test/shell/integration/execution_phase_tests.sh')
-rwxr-xr-xsrc/test/shell/integration/execution_phase_tests.sh24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/shell/integration/execution_phase_tests.sh b/src/test/shell/integration/execution_phase_tests.sh
index 3f25c5df09..7266060b50 100755
--- a/src/test/shell/integration/execution_phase_tests.sh
+++ b/src/test/shell/integration/execution_phase_tests.sh
@@ -268,4 +268,28 @@ function test_jobs_default_auto() {
"--jobs was not set to auto by default"
}
+function test_analysis_warning_cached() {
+ mkdir -p "foo" "bar" || fail "Could not create directories"
+ cat > foo/BUILD <<'EOF' || fail "foo/BUILD"
+cc_library(
+ name = 'foo',
+ deprecation = 'foo warning',
+ srcs = ['foo.cc'],
+ visibility = ['//visibility:public']
+)
+EOF
+ cat > bar/BUILD <<'EOF' || fail "bar/BUILD"
+cc_library(name = 'bar', srcs = ['bar.cc'], deps = ['//foo:foo'])
+EOF
+ touch foo/foo.cc bar/bar.cc || fail "Couldn't touch"
+ bazel build --nobuild //bar:bar >& "$TEST_log" || fail "Expected success"
+ expect_log "WARNING: .*: foo warning"
+ bazel build //bar:bar >& "$TEST_log" || fail "Expected success"
+ expect_log "WARNING: .*: foo warning"
+ echo "// comment" >> bar/bar.cc || fail "Couldn't change contents"
+ bazel build //bar:bar >& "$TEST_log" || fail "Expected success"
+ expect_log "WARNING: .*: foo warning"
+}
+
+
run_suite "Integration tests of ${PRODUCT_NAME} using the execution phase."