Module: CapistranoDeploy::Git

Defined in:
lib/capistrano-deploy/git.rb

Class Method Summary collapse

Class Method Details

.load_into(configuration) ⇒ Object



3
4
5
6
7
8
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
# File 'lib/capistrano-deploy/git.rb', line 3

def self.load_into(configuration)
  configuration.load do
    ssh_options[:forward_agent] = true

    set(:application) { repository.slice(/[^\/:]+?(?=\.git$)/) }
    set(:repository) { abort "Please specify repository, set :repository, 'foo'" }
    set :branch, 'master'
    set :enable_submodules, false

    set(:current_revision) { capture("cd #{deploy_to} && git rev-parse HEAD").chomp }

    set :local_branch do
      `git symbolic-ref HEAD 2> /dev/null`.strip.sub('refs/heads/', '')
    end

    namespace :deploy do
      desc 'Setup'
      task :setup, :except => {:no_release => true} do
        run "mkdir -p `dirname #{deploy_to}` && git clone --no-checkout #{repository} #{deploy_to}"
        update
      end

      desc 'Update the deployed code'
      task :update, :except => {:no_release => true} do
        commit = ENV['COMMIT'] || "origin/#{branch}"
        command = ["cd #{deploy_to}", 'git fetch origin', "git reset --hard #{commit}"]
        command += ['git submodule init', 'git submodule -q sync', 'git submodule -q update'] if enable_submodules
        run command.join(' && ')
      end

      desc 'Show pending commits'
      task :pending do
        commit = ENV['COMMIT'] || "origin/#{branch}"
        system("git log --pretty=medium --stat #{current_revision}..#{commit}")
      end
    end
  end
end