]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/chef/libraries/remote_directory.rb
Move chef extensions/patches to the chef cookbook
[chef.git] / cookbooks / chef / libraries / remote_directory.rb
diff --git a/cookbooks/chef/libraries/remote_directory.rb b/cookbooks/chef/libraries/remote_directory.rb
new file mode 100644 (file)
index 0000000..97adee1
--- /dev/null
@@ -0,0 +1,26 @@
+class Chef
+  class Provider
+    class RemoteDirectory
+      def action_create
+        super
+        Chef::Log.debug("Doing a remote recursive directory transfer for #{@new_resource}")
+          
+        files_transferred = Set.new
+        files_to_transfer.each do |cookbook_file_relative_path|
+          create_cookbook_file(cookbook_file_relative_path)
+          files_transferred << ::File.dirname(::File.join(@new_resource.path, cookbook_file_relative_path))
+          files_transferred << ::File.join(@new_resource.path, cookbook_file_relative_path)
+        end
+        if @new_resource.purge
+          files_to_purge = Set.new(
+                                   Dir.glob(::File.join(@new_resource.path, '**', '*'), ::File::FNM_DOTMATCH).select do |name|
+                                     name !~ /(?:^|#{Regexp.escape(::File::SEPARATOR)})\.\.?$/
+                                   end
+                                   )
+          files_to_purge = files_to_purge - files_transferred
+          purge_unmanaged_files(files_to_purge)
+        end
+      end
+    end
+  end
+end