When ensure => latest, svn didn't update.
[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   has_features :filesystem_types, :reference_tracking
11
12   def create
13     if !@resource.value(:source)
14       create_repository(@resource.value(:path))
15     else
16       checkout_repository(@resource.value(:source),
17                           @resource.value(:path),
18                           @resource.value(:revision))
19     end
20   end
21
22   def exists?
23     File.directory?(File.join(@resource.value(:path), '.svn'))
24   end
25
26   def destroy
27     FileUtils.rm_rf(@resource.value(:path))
28   end
29
30   def latest?
31     at_path do
32       if self.revision < self.latest then
33         return false
34       else
35         return true
36       end
37     end
38   end
39
40   def latest
41     at_path do
42       svn('info', '-r', 'HEAD')[/^Revision:\s+(\d+)/m, 1]
43     end
44   end
45   
46   def revision
47     at_path do
48       svn('info')[/^Revision:\s+(\d+)/m, 1]
49     end
50   end
51
52   def revision=(desired)
53     at_path do
54       svn('update', '-r', desired)
55     end
56   end
57
58   private
59
60   def checkout_repository(source, path, revision = nil)
61     args = ['checkout']
62     if revision
63       args.push('-r', revision)
64     end
65     args.push(source, path)
66     svn(*args)
67   end
68
69   def create_repository(path)
70     args = ['create']
71     if @resource.value(:fstype)
72       args.push('--fs-type', @resource.value(:fstype))
73     end
74     args << path
75     svnadmin(*args)
76   end
77
78 end