deploy! (Capistrano::Deploy::Strategy::Copy)

    # File lib/capistrano/recipes/deploy/strategy/copy.rb, line 46
            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

                # Check the return code of last system command and rollback if not 0
                unless $? == 0
                  raise Capistrano::Error, "shell command failed with return code #{$?}"
                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, "REVISION"), "w") { |f| f.puts(revision) }

              logger.trace "compressing #{destination} to #{filename}"
              Dir.chdir(tmpdir) { system(compress(File.basename(destination), File.basename(filename)).join(" ")) }

              distribute!
            ensure
              FileUtils.rm filename rescue nil
              FileUtils.rm_rf destination rescue nil
            end