From 7e64393dd10023d528d2fc21383ead30c9ee94dd Mon Sep 17 00:00:00 2001 From: Markus Roberts Date: Thu, 31 Dec 2009 01:04:06 -0800 Subject: Additional fix for #2994 (followed symlinks do not have checksums) The first patch for #2994, to which this is an extension, exposed the fact that checksums were not being included in the metadata for followed links; checksums are needed for managing the contents of files that are represented on the server as links (links => follow). This patch adds checksums for followed links and tests to confirm that it works as expected. --- lib/puppet/file_serving/metadata.rb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'lib/puppet') diff --git a/lib/puppet/file_serving/metadata.rb b/lib/puppet/file_serving/metadata.rb index 275a090eb..678a4ff42 100644 --- a/lib/puppet/file_serving/metadata.rb +++ b/lib/puppet/file_serving/metadata.rb @@ -22,18 +22,15 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base PARAM_ORDER = [:mode, :ftype, :owner, :group] def attributes_with_tabs + raise(ArgumentError, "Cannot manage files of type #{ftype}") unless ['file','directory','link'].include? ftype desc = [] PARAM_ORDER.each { |check| check = :ftype if check == :type desc << send(check) } - case ftype - when "file", "directory"; desc << checksum - when "link"; desc << @destination - else - raise ArgumentError, "Cannot manage files of type %s" % ftype - end + desc << checksum if ftype == 'file' or ftype == 'directory' or (ftype == 'link' and @links == :follow) + desc << @destination if ftype == 'link' and @links != :follow return desc.join("\t") end @@ -66,6 +63,7 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, path).to_s when "link" @destination = File.readlink(real_path) + @checksum = ("{%s}" % @checksum_type) + send("%s_file" % @checksum_type, real_path).to_s if @links == :follow else raise ArgumentError, "Cannot manage files of type %s" % stat.ftype end -- cgit