diff options
3 files changed, 67 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java index cb7548ba81..248ba4578b 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java @@ -292,6 +292,10 @@ public abstract class BlazeOptionHandler { for (String warning : optionsParser.getWarnings()) { eventHandler.handle(Event.warn(warning)); } + CommonCommandOptions commonOptions = optionsParser.getOptions(CommonCommandOptions.class); + for (String warning : commonOptions.deprecationWarnings) { + eventHandler.handle(Event.warn(warning)); + } } catch (OptionsParsingException e) { eventHandler.handle(Event.error(e.getMessage())); return ExitCode.COMMAND_LINE_ERROR; diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java b/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java index 1f4e0d738f..c93f667878 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java @@ -275,4 +275,19 @@ public class CommonCommandOptions extends OptionsBase { + "logged with the rest of the Bazel invocation." ) public ToolCommandLineEvent toolCommandLine; + + @Option( + name = "unconditional_warning", + defaultValue = "", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.TERMINAL_OUTPUT}, + allowMultiple = true, + help = + "A warning that will unconditionally get printed with build warnings and errors. This is " + + "useful to deprecate bazelrc files or --config definitions. If the intent is to " + + "effectively deprecate some flag or combination of flags, this is NOT sufficient. " + + "The flag or flags should use the deprecationWarning field in the option definition, " + + "or the bad combination should be checked for programmatically." + ) + public List<String> deprecationWarnings; } diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java index 4c434d171d..bf96663b8c 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java @@ -636,4 +636,52 @@ public class BlazeOptionHandlerTest { .containsExactly("rc", "othercommon", "config1", "other", "explicit") .inOrder(); } + + @Test + public void testWarningFlag() { + optionHandler.parseOptions( + ImmutableList.of( + "c0", + "--unconditional_warning", + "You are forcing this warning to print for no apparent reason"), + eventHandler); + assertThat(parser.getResidue()).isEmpty(); + assertThat(optionHandler.getRcfileNotes()).isEmpty(); + assertThat(eventHandler.getEvents()) + .containsExactly( + Event.warn("You are forcing this warning to print for no apparent reason")); + } + + @Test + public void testWarningFlag_byConfig_notTriggered() { + optionHandler.parseOptions( + ImmutableList.of( + "c0", + "--default_override=0:c0:conf=--unconditional_warning=" + + "config \"conf\" is deprecated, please stop using!", + "--rc_source=/somewhere/.blazerc"), + eventHandler); + assertThat(parser.getResidue()).isEmpty(); + assertThat(optionHandler.getRcfileNotes()).isEmpty(); + assertThat(eventHandler.getEvents()).isEmpty(); + } + + @Test + public void testWarningFlag_byConfig_triggered() { + optionHandler.parseOptions( + ImmutableList.of( + "c0", + "--config=conf", + "--default_override=0:c0:conf=--unconditional_warning=" + + "config \"conf\" is deprecated, please stop using!", + "--rc_source=/somewhere/.blazerc"), + eventHandler); + assertThat(parser.getResidue()).isEmpty(); + assertThat(optionHandler.getRcfileNotes()) + .containsExactly( + "Found applicable config definition c0:conf in file /somewhere/.blazerc: " + + "--unconditional_warning=config \"conf\" is deprecated, please stop using!"); + assertThat(eventHandler.getEvents()) + .containsExactly(Event.warn("config \"conf\" is deprecated, please stop using!")); + } } |