From 7574d84e61086b5835a2b2cc003ca72fcfcf4fe4 Mon Sep 17 00:00:00 2001 From: janakr Date: Tue, 14 Aug 2018 21:38:51 -0700 Subject: 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 --- .../shell/integration/execution_phase_tests.sh | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/test/shell/integration/execution_phase_tests.sh') 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." -- cgit v1.2.3