[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, experimental, updated. debian/2.6.8-1-844-g7ec39d5

Daniel Pittman daniel at puppetlabs.com
Tue May 10 08:11:55 UTC 2011


The following commit has been merged in the experimental branch:
commit f9a2ffd53054b67924790b0386cf74435497c3f1
Author: Daniel Pittman <daniel at puppetlabs.com>
Date:   Fri Apr 8 13:57:31 2011 -0700

    maint: use FileUtil to remove files, not exec
    
    We used to shell out to chmod and rm to clean up temporary files; this lead to
    the cleanup method here being one of the largest consumers of walltime.
    Replacing that with FileUtil calls is as, or more, secure, and performs
    sufficiently well that we can just delegate.
    
    Reviewed-By: Matt Robinson <matt at puppetlabs.com>

diff --git a/spec/lib/puppet_spec/files.rb b/spec/lib/puppet_spec/files.rb
index 38c51a5..30fb4fc 100644
--- a/spec/lib/puppet_spec/files.rb
+++ b/spec/lib/puppet_spec/files.rb
@@ -3,41 +3,51 @@ require 'tempfile'
 
 # A support module for testing files.
 module PuppetSpec::Files
+  # This code exists only to support tests that run as root, pretty much.
+  # Once they have finally been eliminated this can all go... --daniel 2011-04-08
+  if Puppet.features.posix? then
+    def self.in_tmp(path)
+      path =~ /^\/tmp/ or path =~ /^\/var\/folders/
+    end
+  elsif Puppet.features.microsoft_windows?
+    def self.in_tmp(path)
+      tempdir = File.expand_path(File.join(Dir::LOCAL_APPDATA, "Temp"))
+      path =~ /^#{tempdir}/
+    end
+  else
+    fail "Help! Can't find in_tmp for this platform"
+  end
+
   def self.cleanup
-    if defined?($tmpfiles)
-      $tmpfiles.each do |file|
-        file = File.expand_path(file)
-        if Puppet.features.posix? and file !~ /^\/tmp/ and file !~ /^\/var\/folders/
-          puts "Not deleting tmpfile #{file} outside of /tmp or /var/folders"
-          next
-        elsif Puppet.features.microsoft_windows?
-          tempdir = File.expand_path(File.join(Dir::LOCAL_APPDATA, "Temp"))
-          if file !~ /^#{tempdir}/
-            puts "Not deleting tmpfile #{file} outside of #{tempdir}"
-            next
-          end
-        end
-        if FileTest.exist?(file)
-          system("chmod -R 755 '#{file}'")
-          system("rm -rf '#{file}'")
-        end
+    $global_tempfiles ||= []
+    while path = $global_tempfiles.pop do
+      fail "Not deleting tmpfile #{path} outside regular tmpdir" unless in_tmp(path)
+
+      begin
+        FileUtils.rm_r path, :secure => true
+      rescue Errno::ENOENT
+        # nothing to do
       end
-      $tmpfiles.clear
     end
   end
 
   def tmpfile(name)
+    # Generate a temporary file, just for the name...
     source = Tempfile.new(name)
     path = source.path
     source.close!
-    $tmpfiles ||= []
-    $tmpfiles << path
+
+    # ...record it for cleanup,
+    $global_tempfiles ||= []
+    $global_tempfiles << File.expand_path(path)
+
+    # ...and bam.
     path
   end
 
   def tmpdir(name)
-    file = tmpfile(name)
-    FileUtils.mkdir_p(file)
-    file
+    path = tmpfile(name)
+    FileUtils.mkdir_p(path)
+    path
   end
 end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list