2010-03-12 17:44:19 -08:00

72 lines
1.3 KiB
Ruby

Puppet::Type.type(:vcsrepo).provide(:svn) do
desc "Supports Subversion repositories"
commands :svn => 'svn',
:svnadmin => 'svnadmin'
def create
if !@resource.value(:source)
create_repository(@resource.value(:path))
else
checkout_repository(@resource.value(:source),
@resource.value(:path),
@resource.value(:revision))
end
end
def exists?
File.directory?(@resource.value(:path))
end
def destroy
FileUtils.rm_rf(@resource.value(:path))
end
def revision
at_path do
svn('info')[/^Revision:\s+(\d+)/m, 1]
end
end
def revision=(desired)
at_path do
svn('update', '-r', desired)
end
end
private
def checkout_repository(source, path, revision = nil)
args = ['checkout']
if revision
args.push('-r', revision)
end
args.push(source, path)
svn(*args)
end
def create_repository(path)
args = ['create']
if @resource.value(:fstype)
args.push('--fs-type', @resource.value(:fstype))
end
args << path
svnadmin(*args)
end
def reset(desired)
at_path do
git('reset', '--hard', desired)
end
end
def at_path(&block)
value = nil
Dir.chdir(@resource.value(:path)) do
value = yield
end
value
end
end