76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| Puppet::Type.type(:vcsrepo).provide(:svn) do
 | |
|   desc "Supports Subversion repositories"
 | |
| 
 | |
|   commands :svn      => 'svn',
 | |
|            :svnadmin => 'svnadmin'
 | |
| 
 | |
|   defaultfor :svn => :exists
 | |
|   
 | |
|   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
 | |
| 
 | |
|   # Note: We don't rely on Dir.chdir's behavior of automatically returning the
 | |
|   # value of the last statement -- for easier stubbing.
 | |
|   def at_path(&block) #:nodoc:
 | |
|     value = nil
 | |
|     Dir.chdir(@resource.value(:path)) do
 | |
|       value = yield
 | |
|     end
 | |
|     value
 | |
|   end
 | |
| 
 | |
| end
 | 
