Refactor common bits to abstract provider superclass
authorBruce Williams <bruce@codefluency.com>
Sat, 13 Mar 2010 20:04:57 +0000 (12:04 -0800)
committerBruce Williams <bruce@codefluency.com>
Sat, 13 Mar 2010 20:04:57 +0000 (12:04 -0800)
lib/puppet/provider/vcsrepo.rb [new file with mode: 0644]
lib/puppet/provider/vcsrepo/cvs.rb
lib/puppet/provider/vcsrepo/git.rb
lib/puppet/provider/vcsrepo/svn.rb

diff --git a/lib/puppet/provider/vcsrepo.rb b/lib/puppet/provider/vcsrepo.rb
new file mode 100644 (file)
index 0000000..c560e93
--- /dev/null
@@ -0,0 +1,23 @@
+require 'tmpdir'
+require 'digest/md5'
+
+# Abstract
+class Puppet::Provider::Vcsrepo < Puppet::Provider
+
+  private
+
+  # Note: We don't rely on Dir.chdir's behavior of automatically returning the
+  # value of the last statement -- for easier stubbing.
+  def at_path(&block) #:nodoc:
+    value = nil
+    Dir.chdir(@resource.value(:path)) do
+      value = yield
+    end
+    value
+  end
+
+  def tempdir
+    @tempdir ||= File.join(Dir.tmpdir, 'vcsrepo-' + Digest::MD5.hexdigest(@resource.value(:path)))
+  end
+
+end
index 68d22c1..58018d3 100644 (file)
@@ -1,4 +1,6 @@
-Puppet::Type.type(:vcsrepo).provide(:cvs) do
+require 'puppet/provider/vcsrepo'
+
+Puppet::Type.type(:vcsrepo).provide(:cvs, :parent => Puppet::Provider::Vcsrepo) do
   desc "Supports CVS repositories/workspaces"
 
   commands   :cvs => 'cvs'
@@ -74,14 +76,4 @@ Puppet::Type.type(:vcsrepo).provide(:cvs) do
     cvs('-d', path, 'init')
   end
 
-  # Note: We don't rely on Dir.chdir's behavior of automatically returning the
-  # value of the last statement -- for easier stubbing.
-  def at_path(&block) #:nodoc:
-    value = nil
-    Dir.chdir(@resource.value(:path)) do
-      value = yield
-    end
-    value
-  end
-
 end
index 2ea146f..99477a0 100644 (file)
@@ -1,7 +1,6 @@
-require 'tmpdir'
-require 'digest/md5'
+require 'puppet/provider/vcsrepo'
 
-Puppet::Type.type(:vcsrepo).provide(:git) do
+Puppet::Type.type(:vcsrepo).provide(:git, :parent => Puppet::Provider::Vcsrepo) do
   desc "Supports Git repositories"
 
   commands :git => 'git'
@@ -144,18 +143,4 @@ Puppet::Type.type(:vcsrepo).provide(:git) do
     end
   end
 
-  # Note: We don't rely on Dir.chdir's behavior of automatically returning the
-  # value of the last statement -- for easier stubbing.
-  def at_path(&block) #:nodoc:
-    value = nil
-    Dir.chdir(@resource.value(:path)) do
-      value = yield
-    end
-    value
-  end
-
-  def tempdir
-    @tempdir ||= File.join(Dir.tmpdir, 'vcsrepo-' + Digest::MD5.hexdigest(@resource.value(:path)))
-  end
-
 end
index c85ffa4..97c7fcb 100644 (file)
@@ -1,11 +1,13 @@
-Puppet::Type.type(:vcsrepo).provide(:svn) do
+require 'puppet/provider/vcsrepo'
+
+Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo) do
   desc "Supports Subversion repositories"
 
   commands :svn      => 'svn',
            :svnadmin => 'svnadmin'
 
   defaultfor :svn => :exists
-  
+
   def create
     if !@resource.value(:source)
       create_repository(@resource.value(:path))
@@ -56,14 +58,4 @@ Puppet::Type.type(:vcsrepo).provide(:svn) do
     svnadmin(*args)
   end
 
-  # Note: We don't rely on Dir.chdir's behavior of automatically returning the
-  # value of the last statement -- for easier stubbing.
-  def at_path(&block) #:nodoc:
-    value = nil
-    Dir.chdir(@resource.value(:path)) do
-      value = yield
-    end
-    value
-  end
-
 end