From 0a306f288e84bed857e4d82c695dcea0c6ceb37a Mon Sep 17 00:00:00 2001 From: Bruce Williams Date: Sat, 13 Mar 2010 01:05:20 -0800 Subject: Some fixes after live testing, add support for bare cloned repos --- lib/puppet/provider/vcsrepo/git.rb | 44 ++++++++++++++++++++++---------------- lib/puppet/provider/vcsrepo/svn.rb | 2 ++ lib/puppet/type/vcsrepo.rb | 16 ++++++++++++++ 3 files changed, 44 insertions(+), 18 deletions(-) (limited to 'lib') diff --git a/lib/puppet/provider/vcsrepo/git.rb b/lib/puppet/provider/vcsrepo/git.rb index bdc819e..ec58515 100644 --- a/lib/puppet/provider/vcsrepo/git.rb +++ b/lib/puppet/provider/vcsrepo/git.rb @@ -5,24 +5,20 @@ Puppet::Type.type(:vcsrepo).provide(:git) do desc "Supports Git repositories" commands :git => 'git' + defaultfor :git => :exists def create if !@resource.value(:source) init_repository(@resource.value(:path)) else clone_repository(@resource.value(:source), @resource.value(:path)) - reset(@resource.value(:revision)) if @resource.value(:revision) - end - end - - def exists? - case @resource.value(:ensure) - when 'present' - working_copy_exists? - when 'bare' - bare_exists? - else - path_exists? + if @resource.value(:revision) + if @resource.value(:ensure) == :bare + notice "Ignoring revision for bare repository" + else + reset(@resource.value(:revision)) + end + end end end @@ -45,8 +41,6 @@ Puppet::Type.type(:vcsrepo).provide(:git) do reset(desired) end - private - def bare_exists? bare_git_config_exists? && !working_copy_exists? end @@ -54,7 +48,13 @@ Puppet::Type.type(:vcsrepo).provide(:git) do def working_copy_exists? File.directory?(File.join(@resource.value(:path), '.git')) end + + def exists? + bare_exists? || working_copy_exists? + end + private + def path_exists? File.directory?(@resource.value(:path)) end @@ -64,7 +64,12 @@ Puppet::Type.type(:vcsrepo).provide(:git) do end def clone_repository(source, path) - git('clone', source, path) + args = ['clone'] + if @resource.value(:ensure) == :bare + args << '--bare' + end + args.push(source, path) + git(*args) end def fetch @@ -74,9 +79,9 @@ Puppet::Type.type(:vcsrepo).provide(:git) do end def init_repository(path) - if @resource.value(:ensure) == 'bare' && working_copy_exists? + if @resource.value(:ensure) == :bare && working_copy_exists? convert_working_copy_to_bare - elsif @resource.value(:ensure) == 'present' && bare_exists? + elsif @resource.value(:ensure) == :present && bare_exists? convert_bare_to_working_copy elsif File.directory?(@resource.value(:path)) raise Puppet::Error, "Could not create repository (non-repository at path)" @@ -114,8 +119,11 @@ Puppet::Type.type(:vcsrepo).provide(:git) do def normal_init FileUtils.mkdir(@resource.value(:path)) args = ['init'] - if @resource.value(:ensure) == 'bare' + if @resource.value(:ensure) == :bare + notice "Creating a bare repository" args << '--bare' + else + notice "Creating a working copy repository (#{@resource.value(:ensure).inspect})" end at_path do git(*args) diff --git a/lib/puppet/provider/vcsrepo/svn.rb b/lib/puppet/provider/vcsrepo/svn.rb index 0e38769..226cc63 100644 --- a/lib/puppet/provider/vcsrepo/svn.rb +++ b/lib/puppet/provider/vcsrepo/svn.rb @@ -4,6 +4,8 @@ Puppet::Type.type(:vcsrepo).provide(:svn) do commands :svn => 'svn', :svnadmin => 'svnadmin' + defaultfor :svn => :exists + def create if !@resource.value(:source) create_repository(@resource.value(:path)) diff --git a/lib/puppet/type/vcsrepo.rb b/lib/puppet/type/vcsrepo.rb index 4d5c2a0..b093910 100644 --- a/lib/puppet/type/vcsrepo.rb +++ b/lib/puppet/type/vcsrepo.rb @@ -9,6 +9,22 @@ Puppet::Type.newtype(:vcsrepo) do newvalue :bare do provider.create end + + def retrieve + prov = @resource.provider + if prov + if prov.respond_to?(:working_copy_exists?) && prov.working_copy_exists? + :present + elsif prov.respond_to?(:bare_exists?) && prov.bare_exists? + :bare + else + :absent + end + else + :absent + end + end + end newparam(:path) do -- cgit v1.2.3