lib/puppet/util/diff.rb in puppet-0.25.5 vs lib/puppet/util/diff.rb in puppet-2.6.0
- old
+ new
@@ -1,71 +1,74 @@
# Provide a diff between two strings.
module Puppet::Util::Diff
- include Puppet::Util
- require 'tempfile'
+ include Puppet::Util
+ require 'tempfile'
- def diff(old, new)
- command = [Puppet[:diff]]
- if args = Puppet[:diff_args] and args != ""
- command << args
- end
- command << old << new
- execute(command, :failonfail => false)
+ def diff(old, new)
+ command = [Puppet[:diff]]
+ if args = Puppet[:diff_args] and args != ""
+ command << args
end
+ command << old << new
+ execute(command, :failonfail => false)
+ end
- module_function :diff
+ module_function :diff
- # return diff string of two input strings
- # format defaults to unified
- # context defaults to 3 lines
- def lcs_diff(data_old, data_new, format=:unified, context_lines=3)
- unless Puppet.features.diff?
- Puppet.warning "Cannot provide diff without the diff/lcs Ruby library"
- return ""
- end
- data_old = data_old.split(/\n/).map! { |e| e.chomp }
- data_new = data_new.split(/\n/).map! { |e| e.chomp }
+ # return diff string of two input strings
+ # format defaults to unified
+ # context defaults to 3 lines
+ def lcs_diff(data_old, data_new, format=:unified, context_lines=3)
+ unless Puppet.features.diff?
+ Puppet.warning "Cannot provide diff without the diff/lcs Ruby library"
+ return ""
+ end
+ data_old = data_old.split(/\n/).map! { |e| e.chomp }
+ data_new = data_new.split(/\n/).map! { |e| e.chomp }
- output = ""
+ output = ""
- diffs = ::Diff::LCS.diff(data_old, data_new)
- return output if diffs.empty?
+ diffs = ::Diff::LCS.diff(data_old, data_new)
+ return output if diffs.empty?
- oldhunk = hunk = nil
- file_length_difference = 0
+ oldhunk = hunk = nil
+ file_length_difference = 0
- diffs.each do |piece|
- begin
- hunk = ::Diff::LCS::Hunk.new(data_old, data_new, piece,
- context_lines,
- file_length_difference)
- file_length_difference = hunk.file_length_difference
- next unless oldhunk
- # Hunks may overlap, which is why we need to be careful when our
- # diff includes lines of context. Otherwise, we might print
- # redundant lines.
- if (context_lines > 0) and hunk.overlaps?(oldhunk)
- hunk.unshift(oldhunk)
- else
- output << oldhunk.diff(format)
- end
- ensure
- oldhunk = hunk
- output << "\n"
- end
- end
+ diffs.each do |piece|
+ begin
- # Handle the last remaining hunk
- output << oldhunk.diff(format) << "\n"
- end
+ hunk = ::Diff::LCS::Hunk.new(
+ data_old, data_new, piece,
+ context_lines,
- def string_file_diff(path, string)
- require 'tempfile'
- tempfile = Tempfile.new("puppet-diffing")
- tempfile.open
- tempfile.print string
- tempfile.close
- print diff(path, tempfile.path)
- tempfile.delete
+ file_length_difference)
+ file_length_difference = hunk.file_length_difference
+ next unless oldhunk
+ # Hunks may overlap, which is why we need to be careful when our
+ # diff includes lines of context. Otherwise, we might print
+ # redundant lines.
+ if (context_lines > 0) and hunk.overlaps?(oldhunk)
+ hunk.unshift(oldhunk)
+ else
+ output << oldhunk.diff(format)
+ end
+ ensure
+ oldhunk = hunk
+ output << "\n"
+ end
end
+
+ # Handle the last remaining hunk
+ output << oldhunk.diff(format) << "\n"
+ end
+
+ def string_file_diff(path, string)
+ require 'tempfile'
+ tempfile = Tempfile.new("puppet-diffing")
+ tempfile.open
+ tempfile.print string
+ tempfile.close
+ print diff(path, tempfile.path)
+ tempfile.delete
+ end
end