summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2009-02-14 11:43:25 -0600
committerLuke Kanies <luke@madstop.com>2009-02-14 12:24:42 -0600
commit44f97aa5815d4a8ab73302bd75b85e045f9944c4 (patch)
tree13037a58d0666e2533bf85f552327e8a6425f7be
parent04af7b4ead1cbb1466e908e6612b6cc2d4deab53 (diff)
downloadpuppet-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-xlib/puppet/provider/parsedfile.rb2
-rwxr-xr-xlib/puppet/util/filetype.rb10
-rwxr-xr-xspec/unit/provider/parsedfile.rb15
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