Sha256: d31d510a7d202f5110e0385e7a173a0dd35d755fc4c987f4603b3fed1fce735d

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

load File.expand_path("../tasks/scm-local.rake", __FILE__)

require 'capistrano/scm'

require 'zlib'
require 'archive/tar/minitar'
include Archive::Tar
require 'tmpdir'
require 'fileutils'

class Capistrano::Local < Capistrano::SCM
  module PlainStrategy
    def check
      puts repo_url
      test! " [ -e #{repo_url} ] "
    end

    def release
      file_list = Dir.glob(File.join(repo_url, '*')).concat(Dir.glob(File.join(repo_url, '.[^.]*')))

      on release_roles :all, in: :parallel do |host|
        file_list.each { |r| upload! r, release_path, recursive: true }
      end
    end
  end

  module ArchiveStrategy
    def check
      test! " [ -e #{repo_url} ] "
    end

    def release
      archive = ''
      # preparing archive
      run_locally do
        archive = fetch(:tmp_dir, Dir::tmpdir()) + '/' + fetch(:application, 'distr') + "-#{release_timestamp}.tar.gz"
        unless File.exists?(archive)
          if File.directory?(repo_url) || !File.fnmatch('*.tar.gz', repo_url)
            Dir.chdir(repo_url) do
              Minitar.pack('.', Zlib::GzipWriter.new(File.open(archive, 'wb')))
            end
          else
            FileUtils.cp(repo_url, archive)
          end
        end
      end

      # uploading and unpacking
      on release_roles :all, in: :parallel do |host|
        upload! archive, releases_path, verbose: false
        remote_archive = File.join(releases_path, File.basename(archive))
        execute :tar, 'xzf', remote_archive, '-C', release_path
        execute :rm, '-f', remote_archive
      end

      # removing archive
      run_locally do
        execute :rm, '-f', archive
      end
    end
  end
end

set :capistrano_local_archive, Capistrano::Local::ArchiveStrategy

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
capistrano-scm-local-0.1.7 lib/capistrano/scm-local.rb