Skip to content
This repository was archived by the owner on Feb 8, 2024. It is now read-only.

Commit e91a957

Browse files
Michael Knoxmikeknox
authored andcommitted
Fix SVN latest with empty target dir
1 parent 6112583 commit e91a957

File tree

2 files changed

+66
-13
lines changed

2 files changed

+66
-13
lines changed

lib/puppet/provider/vcsrepo/svn.rb

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,47 @@ def create
1919
end
2020
end
2121

22-
def exists?
22+
def working_copy_exists?
2323
File.directory?(File.join(@resource.value(:path), '.svn'))
2424
end
2525

26+
def exists?
27+
working_copy_exists?
28+
end
29+
2630
def destroy
2731
FileUtils.rm_rf(@resource.value(:path))
2832
end
33+
34+
def latest?
35+
at_path do
36+
if self.exists? then
37+
return false
38+
elsif self.revision < self.latest then
39+
return false
40+
else
41+
return true
42+
end
43+
end
44+
end
45+
46+
def latest
47+
at_path do
48+
if self.exists? then
49+
svn('info', '-r', 'HEAD')[/^Revision:\s+(\d+)/m, 1]
50+
else
51+
return nil
52+
end
53+
end
54+
end
2955

3056
def revision
3157
at_path do
32-
svn('info')[/^Revision:\s+(\d+)/m, 1]
58+
if self.exists? then
59+
return svn('info')[/^Revision:\s+(\d+)/m, 1]
60+
else
61+
return nil
62+
end
3363
end
3464
end
3565

lib/puppet/type/vcsrepo.rb

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,30 @@
1919
over time (eg, some VCS tags and branch names)"
2020

2121
ensurable do
22-
22+
attr_accessor :latest
23+
24+
def insync?(is)
25+
@should ||= []
26+
27+
case should
28+
when :present
29+
return true unless [:absent, :purged, :held].include?(is)
30+
when :latest
31+
if is == :latest
32+
return true
33+
else
34+
if provider.respond_to?(:latest?)
35+
self.debug "%s repo revision is %s, latest is %s" %
36+
[@resource.name, provider.revision, provider.latest]
37+
else
38+
self.debug "%s repo revision is %s" %
39+
[@resource.name, provider.revision]
40+
end
41+
return false
42+
end
43+
end
44+
end
45+
2346
newvalue :present do
2447
provider.create
2548
end
@@ -37,7 +60,11 @@
3760
if provider.respond_to?(:update_references)
3861
provider.update_references
3962
end
40-
reference = resource.value(:revision) || provider.revision
63+
if provider.respond_to?(:latest?)
64+
reference = provider.latest || provider.revision
65+
else
66+
reference = resource.value(:revision) || provider.revision
67+
end
4168
notice "Updating to latest '#{reference}' revision"
4269
provider.revision = reference
4370
else
@@ -48,16 +75,12 @@
4875
def retrieve
4976
prov = @resource.provider
5077
if prov
51-
if prov.class.feature?(:bare_repositories)
52-
if prov.working_copy_exists?
53-
:present
54-
elsif prov.bare_exists?
55-
:bare
56-
else
57-
:absent
58-
end
78+
if prov.exists?
79+
prov.latest? ? :latest : :present
80+
elsif prov.class.feature?(:bare_repositories) and prov.bare_exists?
81+
:bare
5982
else
60-
prov.exists? ? :present : :absent
83+
:absent
6184
end
6285
else
6386
raise Puppet::Error, "Could not find provider"

0 commit comments

Comments
 (0)