optparse.Option will ignore the value for options that have the action
"store_true" or "store_false". This is fine if the boolean values match,
but wrong otherwise (e.g. memcheck=yes sets memcheck=True, but so does
memcheck=0).
So: if we have a store_true option with a value that's False, skip the
normal behavior and just set the value to False.
As for store_false.. all our existing "store_false" options start with
"no", which means that negating them yields a double-negative
(e.g. nomemcheck=yes). We've decided that's just too confusing to
accept. so nomemcheck=yes should still set memcheck=False. So we don't
need to do anything special for "store_false".
---
anaconda | 6 +++++-
pyanaconda/anaconda_optparse.py | 4 ++++
2 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/anaconda b/anaconda
index 6a673b1..0a214dc 100755
--- a/anaconda
+++ b/anaconda
@@ -192,6 +192,10 @@ def parseOptions(argv=None, cmdline=None):
op = AnacondaOptionParser(version="%prog " + getAnacondaVersion(),
bootarg_prefix="inst.", require_prefix=False)
+ # NOTE: store_false options will *not* get negated when the user does
+ # "option=0" on the boot commandline (store_true options do, though).
+ # Basically, don't use store_false unless the option starts with "no".
+
# Interface
op.add_option("-C", "--cmdline", dest="display_mode", action="store_const", const="c",
default="g")
@@ -262,7 +266,7 @@ def parseOptions(argv=None, cmdline=None):
op.add_option("--dlabel", action="store_true", default=False)
op.add_option("--image", action="append", dest="images", default=[])
op.add_option("--memcheck", action="store_true", default=True)
- op.add_option("--no-memcheck", action="store_false", dest="memcheck")
+ op.add_option("--nomemcheck", action="store_false", dest="memcheck")
# some defaults change based on cmdline flags
if cmdline is not None:
diff --git a/pyanaconda/anaconda_optparse.py b/pyanaconda/anaconda_optparse.py
index 7653716..ccb0361 100644
--- a/pyanaconda/anaconda_optparse.py
+++ b/pyanaconda/anaconda_optparse.py
@@ -107,6 +107,10 @@ class AnacondaOptionParser(OptionParser):
continue
if option.takes_value() and val is None:
continue # TODO: emit a warning or something there?
+ if option.action == "store_true" and val in ("0", "no", "off"):
+ # special case: "mpath=0" would otherwise set mpath to True
+ setattr(values, option.dest, False)
+ continue
option.process(arg, val, values, self)
return values
--
1.7.7.6