When ensure => latest, svn didn't update.

svn provider now gets the latest revision from the repo, rather than the checkout
Test with revision => <some value> as well

now when ensure => latest, only refresh dependent resources if the
repo is actually updated

Tidied up debug messages
This commit is contained in:
mikeknox 2010-07-07 21:10:56 +10:00 committed by James Turnbull
parent 6112583f15
commit dd31bce565
2 changed files with 41 additions and 3 deletions

View File

@ -26,6 +26,22 @@ Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo)
def destroy
FileUtils.rm_rf(@resource.value(:path))
end
def latest?
at_path do
if self.revision < self.latest then
return false
else
return true
end
end
end
def latest
at_path do
svn('info', '-r', 'HEAD')[/^Revision:\s+(\d+)/m, 1]
end
end
def revision
at_path do
@ -59,4 +75,4 @@ Puppet::Type.type(:vcsrepo).provide(:svn, :parent => Puppet::Provider::Vcsrepo)
svnadmin(*args)
end
end
end

View File

@ -19,7 +19,25 @@ Puppet::Type.newtype(:vcsrepo) do
over time (eg, some VCS tags and branch names)"
ensurable do
attr_accessor :latest
def insync?(is)
@should ||= []
case should
when :present
return true unless [:absent, :purged, :held].include?(is)
when :latest
if provider.latest?
return true
else
self.debug "%s repo revision is %s, latest is %s" %
[@resource.name, provider.revision, provider.latest]
return false
end
end
end
newvalue :present do
provider.create
end
@ -37,7 +55,11 @@ Puppet::Type.newtype(:vcsrepo) do
if provider.respond_to?(:update_references)
provider.update_references
end
reference = resource.value(:revision) || provider.revision
if provider.respond_to?(:latest?)
reference = provider.latest || provider.revision
else
reference = resource.value(:revision) || provider.revision
end
notice "Updating to latest '#{reference}' revision"
provider.revision = reference
else
@ -99,4 +121,4 @@ Puppet::Type.newtype(:vcsrepo) do
end
end
end
end