Basic Mercurial support
[puppet_vcsrepo.git] / lib / puppet / provider / vcsrepo / svn.rb
1 require File.join(File.dirname(__FILE__), '..', 'vcsrepo')
2
3 Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo) do
4   desc "Supports Subversion repositories"
5
6   commands :svn      => 'svn',
7            :svnadmin => 'svnadmin'
8
9   defaultfor :svn => :exists
10
11   def create
12     if !@resource.value(:source)
13       create_repository(@resource.value(:path))
14     else
15       checkout_repository(@resource.value(:source),
16                           @resource.value(:path),
17                           @resource.value(:revision))
18     end
19   end
20
21   def exists?
22     File.directory?(@resource.value(:path))
23   end
24
25   def destroy
26     FileUtils.rm_rf(@resource.value(:path))
27   end
28   
29   def revision
30     at_path do
31       svn('info')[/^Revision:\s+(\d+)/m, 1]
32     end
33   end
34
35   def revision=(desired)
36     at_path do
37       svn('update', '-r', desired)
38     end
39   end
40
41   private
42
43   def checkout_repository(source, path, revision = nil)
44     args = ['checkout']
45     if revision
46       args.push('-r', revision)
47     end
48     args.push(source, path)
49     svn(*args)
50   end
51
52   def create_repository(path)
53     args = ['create']
54     if @resource.value(:fstype)
55       args.push('--fs-type', @resource.value(:fstype))
56     end
57     args << path
58     svnadmin(*args)
59   end
60
61 end