Class: Capistrano::Deploy::Strategy::CopyPartial
- Inherits:
-
Copy
- Object
- Copy
- Capistrano::Deploy::Strategy::CopyPartial
- Defined in:
- lib/capistrano/recipes/deploy/strategy/copy_partial.rb
Defined Under Namespace
Classes: Compression
Instance Method Summary collapse
-
#deploy! ⇒ Object
set :copy_partial, ‘subdir/of/project’.
Instance Method Details
#deploy! ⇒ Object
set :copy_partial, ‘subdir/of/project’
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/capistrano/recipes/deploy/strategy/copy_partial.rb', line 9 def deploy! if copy_cache if File.exists?(copy_cache) logger.debug "refreshing local cache to revision #{revision} at #{copy_cache}" system(source.sync(revision, copy_cache)) else logger.debug "preparing local cache at #{copy_cache}" system(source.checkout(revision, copy_cache)) end logger.debug "copying cache to deployment staging area #{destination}" Dir.chdir(copy_cache) do FileUtils.mkdir_p(destination) queue = Dir.glob("*", File::FNM_DOTMATCH) while queue.any? item = queue.shift name = File.basename(item) next if name == "." || name == ".." next if copy_exclude.any? { |pattern| File.fnmatch(pattern, item) } if File.symlink?(item) FileUtils.ln_s(File.readlink(File.join(copy_cache, item)), File.join(destination, item)) elsif File.directory?(item) queue += Dir.glob("#{item}/*", File::FNM_DOTMATCH) FileUtils.mkdir(File.join(destination, item)) else FileUtils.ln(File.join(copy_cache, item), File.join(destination, item)) end end end else logger.debug "getting (via #{copy_strategy}) revision #{revision} to #{destination}" system(command) if copy_exclude.any? logger.debug "processing exclusions..." if copy_exclude.any? copy_exclude.each do |pattern| delete_list = Dir.glob(File.join(destination, pattern), File::FNM_DOTMATCH) # avoid the /.. trap that deletes the parent directories delete_list.delete_if { |dir| dir =~ /\/\.\.$/ } FileUtils.rm_rf(delete_list.compact) end end end end File.open(File.join(destination_partial, "REVISION"), "w") { |f| f.puts(revision) } logger.trace "compressing #{destination_partial} to #{filename}" Dir.chdir(copy_dir) { system(compress(File.basename(destination), File.basename(filename), copy_partial).join(" ")) } upload(filename, remote_filename) if compression.partial_command && !copy_partial.empty? run "cd #{configuration[:releases_path]} && mkdir #{File.basename(destination)} && cd #{File.basename(destination)} && #{decompress(remote_filename).join(" ")} && rm #{remote_filename}" else run "cd #{configuration[:releases_path]} && #{decompress(remote_filename).join(" ")} && rm #{remote_filename}" end ensure FileUtils.rm filename rescue nil FileUtils.rm_rf destination rescue nil end |