Fix config.py output when a symbol has acquired or lost a value
Normally a valueless symbol remains valueless and a symbol with a
value keeps having one. But just in case a symbol does get changed
from valueless to having a value, make sure there's a space between
the symbol and the value. And if a symbol gets changed from having a
value to valueless, strip trailing whitespace.
Add corresponding tests.
Also fix the case of a valueless symbol added with the set method,
which would have resulted in attempting to use None as a string. This
only happened with the Python API, not with the command line API.
diff --git a/scripts/config.py b/scripts/config.py
index 58be3b2..e01b9d5 100755
--- a/scripts/config.py
+++ b/scripts/config.py
@@ -302,10 +302,22 @@
where <middle> is "#define <name> ".
"""
setting = self.settings[name]
+ value = setting.value
+ if value is None:
+ value = ''
+ # Normally the whitespace to separte the symbol name from the
+ # value is part of middle, and there's no whitespace for a symbol
+ # with no value. But if a symbol has been changed from having a
+ # value to not having one, the whitespace is wrong, so fix it.
+ if value:
+ if middle[-1] not in '\t ':
+ middle += ' '
+ else:
+ middle = middle.rstrip()
return ''.join([indent,
'' if setting.active else '//',
middle,
- setting.value]).rstrip()
+ value]).rstrip()
def write_to_stream(self, output):
"""Write the whole configuration to output."""