diff options
author | Luke Kanies <luke@madstop.com> | 2009-02-14 11:43:25 -0600 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2009-02-14 12:24:42 -0600 |
commit | 44f97aa5815d4a8ab73302bd75b85e045f9944c4 (patch) | |
tree | 13037a58d0666e2533bf85f552327e8a6425f7be | |
parent | 04af7b4ead1cbb1466e908e6612b6cc2d4deab53 (diff) | |
download | puppet-44f97aa5815d4a8ab73302bd75b85e045f9944c4.tar.gz puppet-44f97aa5815d4a8ab73302bd75b85e045f9944c4.tar.xz puppet-44f97aa5815d4a8ab73302bd75b85e045f9944c4.zip |
Only backing up within parsedfile when managing files
I was getting failing tests because I was using non-files
for testing and they didn't back up the same, not
surprisingly.
This moves the 'backup' method to the :flat filetype
and then only backs up if the filetype supports it.
Signed-off-by: Luke Kanies <luke@madstop.com>
-rwxr-xr-x | lib/puppet/provider/parsedfile.rb | 2 | ||||
-rwxr-xr-x | lib/puppet/util/filetype.rb | 10 | ||||
-rwxr-xr-x | spec/unit/provider/parsedfile.rb | 15 |
3 files changed, 19 insertions, 8 deletions
diff --git a/lib/puppet/provider/parsedfile.rb b/lib/puppet/provider/parsedfile.rb index 45eae57ff..40e172785 100755 --- a/lib/puppet/provider/parsedfile.rb +++ b/lib/puppet/provider/parsedfile.rb @@ -81,6 +81,8 @@ class Puppet::Provider::ParsedFile < Puppet::Provider # Make sure our file is backed up, but only back it up once per transaction. # We cheat and rely on the fact that @records is created on each prefetch. def self.backup_target(target) + return nil unless target_object(target).respond_to?(:backup) + unless defined?(@backup_stats) @backup_stats = {} end diff --git a/lib/puppet/util/filetype.rb b/lib/puppet/util/filetype.rb index 5d4ba1440..40c028cc2 100755 --- a/lib/puppet/util/filetype.rb +++ b/lib/puppet/util/filetype.rb @@ -72,11 +72,6 @@ class Puppet::Util::FileType @filetypes[type] end - # Back the file up before replacing it. - def backup - bucket.backup(@path) if File.exists?(@path) - end - # Pick or create a filebucket to use. def bucket filebucket = Puppet::Type.type(:filebucket) @@ -90,6 +85,11 @@ class Puppet::Util::FileType # Operate on plain files. newfiletype(:flat) do + # Back the file up before replacing it. + def backup + bucket.backup(@path) if File.exists?(@path) + end + # Read the file. def read if File.exist?(@path) diff --git a/spec/unit/provider/parsedfile.rb b/spec/unit/provider/parsedfile.rb index 11a91c8d7..f20b6b235 100755 --- a/spec/unit/provider/parsedfile.rb +++ b/spec/unit/provider/parsedfile.rb @@ -56,18 +56,27 @@ describe Puppet::Provider::ParsedFile do @class.initvars @class.prefetch - @filetype = mock 'filetype' - Puppet::Util::FileType.filetype(:flat).expects(:new).with("/my/file").returns @filetype + @filetype = Puppet::Util::FileType.filetype(:flat).new("/my/file") + Puppet::Util::FileType.filetype(:flat).stubs(:new).with("/my/file").returns @filetype @filetype.stubs(:write) end - it "should back up the file being written" do + it "should back up the file being written if the filetype can be backed up" do @filetype.expects(:backup) @class.flush_target("/my/file") end + it "should not try to back up the file if the filetype cannot be backed up" do + @filetype = Puppet::Util::FileType.filetype(:ram).new("/my/file") + Puppet::Util::FileType.filetype(:flat).expects(:new).returns @filetype + + @filetype.stubs(:write) + + @class.flush_target("/my/file") + end + it "should not back up the file more than once between calls to 'prefetch'" do @filetype.expects(:backup).once |