From 94fa5d5de2ad8f9d916178bce7ff9eeba748047a Mon Sep 17 00:00:00 2001 From: Jesse Wolfe Date: Fri, 9 Jul 2010 17:11:36 -0700 Subject: [#4182] show_diff was broken for streamed file contents show_diff was written assuming that a file's contents would be loaded into memory. That's no longer true, for perfomance reasons. This patch streams the file to a temporary file to take the diff. As a consequence, it means that when show_diff is on, files may get streamed twice. --- lib/puppet/type/file/content.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/puppet/type/file/content.rb b/lib/puppet/type/file/content.rb index 7d541645c..d7bb022a3 100755 --- a/lib/puppet/type/file/content.rb +++ b/lib/puppet/type/file/content.rb @@ -1,5 +1,6 @@ require 'net/http' require 'uri' +require 'tempfile' require 'puppet/util/checksums' require 'puppet/network/http/api/v1' @@ -101,7 +102,9 @@ module Puppet result = super if ! result and Puppet[:show_diff] - string_file_diff(@resource[:path], actual_content) + write_temporarily do |path| + print diff(@resource[:path], path) + end end return result end @@ -137,6 +140,19 @@ module Puppet return return_event end + def write_temporarily + tempfile = Tempfile.new("puppet-file") + tempfile.open + + write(tempfile) + + tempfile.close + + yield tempfile.path + + tempfile.delete + end + def write(file) resource.parameter(:checksum).sum_stream { |sum| each_chunk_from(actual_content || resource.parameter(:source)) { |chunk| -- cgit