summaryrefslogtreecommitdiff
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/provider/vcsrepo/cvs.rb57
1 files changed, 46 insertions, 11 deletions
diff --git a/lib/puppet/provider/vcsrepo/cvs.rb b/lib/puppet/provider/vcsrepo/cvs.rb
index f504cb1..85178f1 100644
--- a/lib/puppet/provider/vcsrepo/cvs.rb
+++ b/lib/puppet/provider/vcsrepo/cvs.rb
@@ -13,6 +13,7 @@ Puppet::Type.type(:vcsrepo).provide(:cvs, :parent => Puppet::Provider::Vcsrepo)
else
checkout_repository
end
+ update_owner
end
def exists?
@@ -32,19 +33,46 @@ Puppet::Type.type(:vcsrepo).provide(:cvs, :parent => Puppet::Provider::Vcsrepo)
FileUtils.rm_rf(@resource.value(:path))
end
+ def latest?
+ debug "Checking for updates because 'ensure => latest'"
+ at_path do
+ # We cannot use -P to prune empty dirs, otherwise
+ # CVS would report those as "missing", regardless
+ # if they have contents or updates.
+ is_current = (cvs('-nq', 'update', '-d').strip == "")
+ if (!is_current) then debug "There are updates available on the checkout's current branch/tag." end
+ return is_current
+ end
+ end
+
+ def latest
+ # CVS does not have a conecpt like commit-IDs or change
+ # sets, so we can only have the current branch name (or the
+ # requested one, if that differs) as the "latest" revision.
+ should = @resource.value(:revision)
+ current = self.revision
+ return should != current ? should : current
+ end
+
def revision
- if File.exist?(tag_file)
- contents = File.read(tag_file)
- # Note: Doesn't differentiate between N and T entries
- contents[1..-1]
- else
- 'MAIN'
+ if !@rev
+ if File.exist?(tag_file)
+ contents = File.read(tag_file).strip
+ # Note: Doesn't differentiate between N and T entries
+ @rev = contents[1..-1]
+ else
+ @rev = 'HEAD'
+ end
+ debug "Checkout is on branch/tag '#{@rev}'"
end
+ return @rev
end
def revision=(desired)
at_path do
- cvs('update', '-r', desired, '.')
+ cvs('update', '-dr', desired, '.')
+ update_owner
+ @rev = desired
end
end
@@ -61,12 +89,13 @@ Puppet::Type.type(:vcsrepo).provide(:cvs, :parent => Puppet::Provider::Vcsrepo)
if @resource.value(:compression)
args.push('-z', @resource.value(:compression))
end
- args.push('checkout', '-d', basename, module_name)
+ args.push('checkout')
+ if @resource.value(:revision)
+ args.push('-r', @resource.value(:revision))
+ end
+ args.push('-d', basename, module_name)
cvs(*args)
end
- if @resource.value(:revision)
- self.revision = @resource.value(:revision)
- end
end
# When the source:
@@ -83,4 +112,10 @@ Puppet::Type.type(:vcsrepo).provide(:cvs, :parent => Puppet::Provider::Vcsrepo)
cvs('-d', path, 'init')
end
+ def update_owner
+ if @resource.value(:owner) or @resource.value(:group)
+ set_ownership
+ end
+ end
+
end