Commit b77c43ae authored by Jim Fulton's avatar Jim Fulton

Fixed bug in handling saved option values with a single leading or

trailing newline.
parent 42c0b2ba
...@@ -242,8 +242,22 @@ class Buildout(dict): ...@@ -242,8 +242,22 @@ class Buildout(dict):
if part in install_parts: if part in install_parts:
old_options = installed_part_options[part].copy() old_options = installed_part_options[part].copy()
old_options.pop('__buildout_installed__') old_options.pop('__buildout_installed__')
if old_options == self.get(part): new_options = self.get(part)
if old_options == new_options:
continue continue
for k in old_options:
if k not in new_options:
self._logger.debug("Part: %s, dropped option %s",
part, k)
elif old_options[k] != new_options[k]:
self._logger.debug(
"Part: %s, option %s, %r != %r",
part, k, new_options[k], old_options[k],
)
for k in new_options:
if k not in old_options:
self._logger.debug("Part: %s, new option %s",
part, k)
elif not uninstall_missing: elif not uninstall_missing:
continue continue
...@@ -462,8 +476,9 @@ class Buildout(dict): ...@@ -462,8 +476,9 @@ class Buildout(dict):
_save_options(section, self[section], sys.stdout) _save_options(section, self[section], sys.stdout)
print print
_spacey_nl = re.compile('^[ \t\r\f\v]+' _spacey_nl = re.compile('[ \t\r\f\v]*\n[ \t\r\f\v\n]*'
'|''[ \t\r\f\v]*\n[ \t\r\f\v\n]*' '|'
'^[ \t\r\f\v]+'
'|' '|'
'[ \t\r\f\v]+$' '[ \t\r\f\v]+$'
) )
...@@ -497,6 +512,10 @@ def _save_options(section, options, f): ...@@ -497,6 +512,10 @@ def _save_options(section, options, f):
for option, value in items: for option, value in items:
value = value.replace('%', '%%') value = value.replace('%', '%%')
value = _spacey_nl.sub(_quote_spacey_nl, value) value = _spacey_nl.sub(_quote_spacey_nl, value)
if value.startswith('\n\t'):
value = '%(__buildout_space_n__)s' + value[2:]
if value.endswith('\n\t'):
value = value[:-2] + '%(__buildout_space_n__)s'
print >>f, option, '=', value print >>f, option, '=', value
......
...@@ -80,6 +80,15 @@ def test_comparing_saved_options_with_funny_characters(): ...@@ -80,6 +80,15 @@ def test_comparing_saved_options_with_funny_characters():
... ...
... </zodb> ... </zodb>
... \"\"\" ... \"\"\"
... options['debug1'] = \"\"\"
... <zodb>
...
... <filestorage>
... path foo
... </filestorage>
...
... </zodb>
... \"\"\"
... options['debug2'] = ' x ' ... options['debug2'] = ' x '
... options['debug3'] = '42' ... options['debug3'] = '42'
... options['format'] = '%3d' ... options['format'] = '%3d'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment