From 16cb4dd34ca5f7ad485d9e4fff48b8180e03fee9 Mon Sep 17 00:00:00 2001 From: cnsun Date: Thu, 8 Mar 2018 15:12:38 -0800 Subject: Add a flag to control whether to treat missing dependencies as errors or warnings (--emit_errors or --noemit_errors). RELNOTES:None. PiperOrigin-RevId: 188397338 --- .../com/google/devtools/build/importdeps/Main.java | 19 ++++++++++++++----- .../com/google/devtools/build/importdeps/BUILD | 18 ++++++++++++++++++ .../google/devtools/build/importdeps/golden_test.sh | 8 +++++--- .../com/google/devtools/build/importdeps/tests.bzl | 5 ++++- 4 files changed, 41 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java b/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java index 53e1f82309..6eed69e665 100644 --- a/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java +++ b/src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps/Main.java @@ -92,11 +92,18 @@ public class Main { help = "Output path to save the result." ) public Path output; + + @Option( + name = "fail_on_errors", + defaultValue = "true", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.UNKNOWN}, + help = "Fail on incomplete dependencies, otherwise emit warnings." + ) + public boolean failOnErrors; } - /** - * A randomly picked large exit code to avoid collision with other common exit codes. - */ + /** A randomly picked large exit code to avoid collision with other common exit codes. */ private static final int DEPS_ERROR_EXIT_CODE = 199; public static void main(String[] args) throws IOException { @@ -115,9 +122,11 @@ public class Main { if (!checker.check()) { String result = checker.computeResultOutput(); checkState(!result.isEmpty(), "The result should NOT be empty."); - exitCode = DEPS_ERROR_EXIT_CODE; + exitCode = options.failOnErrors ? DEPS_ERROR_EXIT_CODE : 0; + System.err.println( - "ERROR: The dependencies for the jars " + (options.failOnErrors ? "ERROR" : "WARNING") + + ": The dependencies for the jars " + options.inputJars + " are not complete. bootclasspath = " + options.bootclasspath diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD index 16af1d65af..da4b1a9c55 100644 --- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD +++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/BUILD @@ -118,6 +118,18 @@ load("//src/java_tools/import_deps_checker/javatests/com/google/devtools/build/i create_golden_test( name = "bootclasspath_missing_golden_test", + emit_errors = True, + golden_file = "golden_bootclasspath_missing.txt", + has_bootclasspath = False, + import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", + missing_jar = None, + rt_jar = "@local_jdk//:jre/lib/rt.jar", + testdata_pkg = "//src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata", +) + +create_golden_test( + name = "warn_on_bootclasspath_missing_golden_test", + emit_errors = False, golden_file = "golden_bootclasspath_missing.txt", has_bootclasspath = False, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", @@ -128,6 +140,7 @@ create_golden_test( create_golden_test( name = "library_exception_missing_golden_test", + emit_errors = True, golden_file = "golden_library_exception_missing.txt", has_bootclasspath = True, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", @@ -138,6 +151,7 @@ create_golden_test( create_golden_test( name = "library_annotation_missing_golden_test", + emit_errors = True, golden_file = "golden_library_annotation_missing.txt", has_bootclasspath = True, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", @@ -148,6 +162,7 @@ create_golden_test( create_golden_test( name = "library_missing_golden_test", + emit_errors = True, golden_file = "golden_library_missing.txt", has_bootclasspath = True, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", @@ -158,6 +173,7 @@ create_golden_test( create_golden_test( name = "library_interface_missing_golden_test", + emit_errors = True, golden_file = "golden_library_interface_missing.txt", has_bootclasspath = True, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", @@ -168,6 +184,7 @@ create_golden_test( create_golden_test( name = "library_members_missing_golden_test", + emit_errors = True, golden_file = "golden_library_members_missing.txt", has_bootclasspath = True, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", @@ -179,6 +196,7 @@ create_golden_test( create_golden_test( name = "complete_classpath_golden_test", + emit_errors = True, golden_file = "golden_complete_classpath.txt", has_bootclasspath = True, import_deps_checker = "//src/java_tools/import_deps_checker/java/com/google/devtools/build/importdeps:ImportDepsChecker", diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/golden_test.sh b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/golden_test.sh index 3b835f6471..d9f967c28e 100755 --- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/golden_test.sh +++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/golden_test.sh @@ -17,6 +17,9 @@ gold_file=$1 shift +expected_exit_code=$1 +shift + if [ -d "$TEST_TMPDIR" ]; then # Running as part of blaze test tmpdir="$TEST_TMPDIR" @@ -40,9 +43,8 @@ checker_stderr="${output}/checker_stderr.txt" $@ --output "${actual_file}" 2> ${checker_stderr} checker_ret=$? -# The exit code 199 means the checker finds dependency issues. -if [[ "${checker_ret}" != 0 ]] && [[ "${checker_ret}" != 199 ]]; then - echo "Checker error!!! ${checker_ret}" +if [[ "${checker_ret}" != ${expected_exit_code} ]]; then + echo "Checker error!!! ${checker_ret}, expected=${expected_exit_code}" cat ${checker_stderr} exit ${checker_ret} fi diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl index df7069feb6..5e6bfef50d 100644 --- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl +++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/tests.bzl @@ -13,7 +13,7 @@ # limitations under the License. '''Helpers to create golden tests, to minimize code duplication.''' -def create_golden_test(name, golden_file, has_bootclasspath, testdata_pkg, +def create_golden_test(name, golden_file, emit_errors, has_bootclasspath, testdata_pkg, import_deps_checker, rt_jar, missing_jar = None, replacing_jar = None): '''Create a golden test for the dependency checker.''' @@ -35,7 +35,10 @@ def create_golden_test(name, golden_file, has_bootclasspath, testdata_pkg, args = [ "$(location %s)" % golden_file, + # The exit code 199 means the checker emits errors on dependency issues. + "199" if emit_errors else "0", "$(location %s)" % import_deps_checker, + "--fail_on_errors" if emit_errors else "--nofail_on_errors" ] args.append("--bootclasspath_entry") if has_bootclasspath: -- cgit v1.2.3