[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. puppet-0.24.5-rc3-1601-gf8c1b08
James Turnbull
james at lovedthanlost.net
Fri Jan 15 09:08:35 UTC 2010
The following commit has been merged in the upstream branch:
commit 7e64393dd10023d528d2fc21383ead30c9ee94dd
Author: Markus Roberts <Markus at reality.com>
Date: Thu Dec 31 01:04:06 2009 -0800
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.
diff --git a/lib/puppet/file_serving/metadata.rb b/lib/puppet/file_serving/metadata.rb
index 275a090..678a4ff 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
diff --git a/spec/unit/file_serving/metadata.rb b/spec/unit/file_serving/metadata.rb
index 38240f7..a3078fa 100755
--- a/spec/unit/file_serving/metadata.rb
+++ b/spec/unit/file_serving/metadata.rb
@@ -230,23 +230,37 @@ describe Puppet::FileServing::Metadata, " when collecting attributes" do
end
describe Puppet::FileServing::Metadata, " when pointing to a link" do
- it "should store the destination of the link in :destination if links are :manage" do
- file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :manage)
-
- File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755)
- File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path"
-
- file.collect
- file.destination.should == "/some/other/path"
+ describe "when links are managed" do
+ before do
+ @file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :manage)
+ File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755)
+ File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path"
+ end
+ it "should store the destination of the link in :destination if links are :manage" do
+ @file.collect
+ @file.destination.should == "/some/other/path"
+ end
+ it "should not collect the checksum if links are :manage" do
+ @file.collect
+ @file.checksum.should be_nil
+ end
end
- it "should not collect the checksum" do
- file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :manage)
-
- File.expects(:lstat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "link", :mode => 0755)
- File.expects(:readlink).with("/base/path/my/file").returns "/some/other/path"
-
- file.collect
- file.checksum.should be_nil
+ describe "when links are followed" do
+ before do
+ @file = Puppet::FileServing::Metadata.new("/base/path/my/file", :links => :follow)
+ File.expects(:stat).with("/base/path/my/file").returns stub("stat", :uid => 1, :gid => 2, :ftype => "file", :mode => 0755)
+ File.expects(:readlink).with("/base/path/my/file").never
+ @checksum = Digest::MD5.hexdigest("some content\n")
+ @file.stubs(:md5_file).returns(@checksum)
+ end
+ it "should not store the destination of the link in :destination if links are :follow" do
+ @file.collect
+ @file.destination.should be_nil
+ end
+ it "should collect the checksum if links are :follow" do
+ @file.collect
+ @file.checksum.should == "{md5}#{@checksum}"
+ end
end
end
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list