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