Merge pull request #14155 from towolf/fix_difflist_return_value

Fix handling of difflist containing multiple before/after pairs
pull/12168/merge
Brian Coca 9 years ago
commit 4f93b17c54

@ -106,7 +106,6 @@ class CallbackBase:
try: try:
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.simplefilter('ignore') warnings.simplefilter('ignore')
ret = []
if 'dst_binary' in diff: if 'dst_binary' in diff:
ret.append("diff skipped: destination file appears to be binary\n") ret.append("diff skipped: destination file appears to be binary\n")
if 'src_binary' in diff: if 'src_binary' in diff:
@ -128,14 +127,22 @@ class CallbackBase:
after_header = "after: %s" % diff['after_header'] after_header = "after: %s" % diff['after_header']
else: else:
after_header = 'after' after_header = 'after'
differ = difflib.unified_diff(to_unicode(diff['before']).splitlines(True), to_unicode(diff['after']).splitlines(True), before_header, after_header, '', '', 10) differ = difflib.unified_diff(to_unicode(diff['before']).splitlines(True),
ret.extend(list(differ)) to_unicode(diff['after']).splitlines(True),
ret.append('\n') fromfile=before_header,
tofile=after_header,
fromfiledate='',
tofiledate='',
n=10)
difflines = list(differ)
if difflines:
ret.extend(difflines)
ret.append('\n')
if 'prepared' in diff: if 'prepared' in diff:
ret.append(to_unicode(diff['prepared'])) ret.append(to_unicode(diff['prepared']))
return u"".join(ret)
except UnicodeDecodeError: except UnicodeDecodeError:
ret.append(">> the files are different, but the diff library cannot compare unicode strings\n\n") ret.append(">> the files are different, but the diff library cannot compare unicode strings\n\n")
return u''.join(ret)
def _get_item(self, result): def _get_item(self, result):
if result.get('_ansible_no_log', False): if result.get('_ansible_no_log', False):

@ -138,9 +138,13 @@ class CallbackModule(CallbackBase):
if result._task.loop and 'results' in result._result: if result._task.loop and 'results' in result._result:
for res in result._result['results']: for res in result._result['results']:
if 'diff' in res and res['diff']: if 'diff' in res and res['diff']:
self._display.display(self._get_diff(res['diff'])) diff = self._get_diff(res['diff'])
if diff:
self._display.display(diff)
elif 'diff' in result._result and result._result['diff']: elif 'diff' in result._result and result._result['diff']:
self._display.display(self._get_diff(result._result['diff'])) diff = self._get_diff(result._result['diff'])
if diff:
self._display.display(diff)
def v2_playbook_item_on_ok(self, result): def v2_playbook_item_on_ok(self, result):

Loading…
Cancel
Save