Refactor common bits to abstract provider superclass

This commit is contained in:
Bruce Williams 2010-03-13 12:04:57 -08:00
parent 7d4244b35e
commit 2926aca2e4
4 changed files with 32 additions and 40 deletions

View File

@ -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

View 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

View 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

View 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