From 3079a0377354b7dbcdac0ab25b9f0be2fc7d128d Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Wed, 10 Feb 2016 12:05:45 -0500 Subject: [PATCH] read full file when doing diff but avoid reading file at all or full file when file is too big for diffing --- lib/ansible/plugins/action/__init__.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py index 78c7e809bb..9a149895a3 100644 --- a/lib/ansible/plugins/action/__init__.py +++ b/lib/ansible/plugins/action/__init__.py @@ -600,20 +600,21 @@ class ActionBase(with_metaclass(ABCMeta, object)): diff['before'] = dest_contents if source_file: - display.debug("Reading local copy of the file %s" % source) - try: - src = open(source) - src_contents = src.read(8192) - st = os.stat(source) - except Exception as e: - raise AnsibleError("Unexpected error while reading source (%s) for diff: %s " % (source, str(e))) - if "\x00" in src_contents: - diff['src_binary'] = 1 - elif st[stat.ST_SIZE] > C.MAX_FILE_SIZE_FOR_DIFF: + st = os.stat(source) + if st[stat.ST_SIZE] > C.MAX_FILE_SIZE_FOR_DIFF: diff['src_larger'] = C.MAX_FILE_SIZE_FOR_DIFF else: - diff['after_header'] = source - diff['after'] = src_contents + display.debug("Reading local copy of the file %s" % source) + try: + src = open(source) + src_contents = src.read() + except Exception as e: + raise AnsibleError("Unexpected error while reading source (%s) for diff: %s " % (source, str(e))) + if "\x00" in src_contents: + diff['src_binary'] = 1 + else: + diff['after_header'] = source + diff['after'] = src_contents else: display.debug("source of file passed in") diff['after_header'] = 'dynamically generated'