[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, master, updated. debian/0.24.7-1-98-gf19c0e5

James Turnbull james at lovedthanlost.net
Wed Apr 8 21:48:09 UTC 2009


The following commit has been merged in the master branch:
commit d5a193a594bbc2194dbf1e5264369ebea0e55880
Author: Luke Kanies <luke at madstop.com>
Date:   Thu Jan 15 15:44:09 2009 -0600

    Fixing #1541 - ParsedFile only backs up files once per transaction
    
    This moves responsibility for backups from the filetype
    to the consumer of the filetype, but only ParsedFile actually uses
    filetypes.
    
    Signed-off-by: Luke Kanies <luke at madstop.com>

diff --git a/lib/puppet/provider/parsedfile.rb b/lib/puppet/provider/parsedfile.rb
index a4c4bc8..45eae57 100755
--- a/lib/puppet/provider/parsedfile.rb
+++ b/lib/puppet/provider/parsedfile.rb
@@ -78,8 +78,22 @@ class Puppet::Provider::ParsedFile < Puppet::Provider
         @modified.reject! { |t| flushed.include?(t) }
     end
 
+    # 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)
+        unless defined?(@backup_stats)
+            @backup_stats = {}
+        end
+        return nil if @backup_stats[target] == @records.object_id
+
+        target_object(target).backup
+        @backup_stats[target] = @records.object_id
+    end
+
     # Flush all of the records relating to a specific target.
     def self.flush_target(target)
+        backup_target(target)
+
         records = target_records(target).reject { |r|
             r[:ensure] == :absent
         }
diff --git a/lib/puppet/util/filetype.rb b/lib/puppet/util/filetype.rb
index 137ef0c..5d4ba14 100755
--- a/lib/puppet/util/filetype.rb
+++ b/lib/puppet/util/filetype.rb
@@ -108,7 +108,6 @@ class Puppet::Util::FileType
 
         # Overwrite the file.
         def write(text)
-            backup()
             require "tempfile"
             tf = Tempfile.new("puppet") 
             tf.print text; tf.flush 
diff --git a/spec/unit/provider/parsedfile.rb b/spec/unit/provider/parsedfile.rb
index 05e9de3..11a91c8 100755
--- a/spec/unit/provider/parsedfile.rb
+++ b/spec/unit/provider/parsedfile.rb
@@ -47,4 +47,40 @@ describe Puppet::Provider::ParsedFile do
             @class.instances
         end
     end
+
+    describe "when flushing a file's records to disk" do
+        before do
+            # This way we start with some @records, like we would in real life.
+            @class.stubs(:retrieve).returns []
+            @class.default_target = "/foo/bar"
+            @class.initvars
+            @class.prefetch
+
+            @filetype = mock 'filetype'
+            Puppet::Util::FileType.filetype(:flat).expects(:new).with("/my/file").returns @filetype
+
+            @filetype.stubs(:write)
+        end
+
+        it "should back up the file being written" do
+            @filetype.expects(:backup)
+
+            @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
+
+            @class.flush_target("/my/file")
+            @class.flush_target("/my/file")
+        end
+
+        it "should back the file up again once the file has been reread" do
+            @filetype.expects(:backup).times(2)
+
+            @class.flush_target("/my/file")
+            @class.prefetch
+            @class.flush_target("/my/file")
+        end
+    end
 end
diff --git a/spec/unit/util/filetype.rb b/spec/unit/util/filetype.rb
index 74dae33..0506b6b 100644
--- a/spec/unit/util/filetype.rb
+++ b/spec/unit/util/filetype.rb
@@ -91,12 +91,6 @@ describe Puppet::Util::FileType do
                 Tempfile.stubs(:new).returns @tempfile
             end
 
-            it "should back up the file" do
-                @file.expects(:backup)
-
-                @file.write("foo")
-            end
-
             it "should first create a temp file and copy its contents over to the file location" do
                 Tempfile.expects(:new).with("puppet").returns @tempfile
                 @tempfile.expects(:print).with("my text")

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list