Class: Svn

Inherits:
Object
  • Object
show all
Defined in:
lib/svn.rb

Class Method Summary collapse

Class Method Details

.publish(source_dir, destination, source_glob = '**/*') ⇒ Object

source_glob defaults to ‘*/’ to publish all files in the source_dir



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/svn.rb', line 9

def self.publish source_dir, destination, source_glob='**/*'
	raise "Svn.publish: destination #{destination} already exists" if(`svn info #{destination} 2>&1`.include?('Revision:'))

	# create subversion directory
	if(!`svn mkdir #{destination} --parents --message mkdir_for_publishing`.include?('Committed'))
		raise "failure 'svn mkdir #{destination} --parents --message mkdir_for_publishing'"
	end

	files=nil
	Dir.chdir(source_dir) do
		files=FileList.new(source_glob).to_a
	end

	pwd=Dir.pwd
	Dir.mktmpdir{|dir|

		# checkout new subversion directory
		if(!`svn checkout #{destination} to_publish_checkout`.include?('Checked out'))
			raise "failure 'svn checkout #{destination} to_publish_checkout'"
		end

		# copy files into the checkout out subversion directory to_publish
		raise "to_publish_checkout does not exist" if(!File.exists?('to_publish_checkout'))
		Dir.chdir('to_publish_checkout') do
			File.open('add.txt','w'){|add_file|

				files.each{|f|
					fdir=File.dirname(f)
					FileUtils.mkdir_p(fdir) if(fdir.length > 0 && !File.exists?(fdir))
					FileUtils.cp("#{source_dir}/#{f}","#{f}")
					add_file.puts f
				}
				add_file.close
			}

               `svn add --parents --targets add.txt 2>&1`
			commit_output = `svn commit -m"add" 2>&1`
			if(!commit_output.include?("Committed"))
				raise "failure 'svn commit -m'added files''"
			end
		end
		
		FileUtils.rm_r 'to_publish_checkout'
	}
end