aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeOptionHandler.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/CommonCommandOptions.java15
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/BlazeOptionHandlerTest.java48
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!"));
+ }
}