Skip to content

Instantly share code, notes, and snippets.

@cickes
Forked from bhaberer/submodule_strategy.rb
Last active August 29, 2015 13:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save cickes/10388315 to your computer and use it in GitHub Desktop.
Save cickes/10388315 to your computer and use it in GitHub Desktop.
# Usage:
# 1. Drop this file into lib/capistrano/submodule_strategy.rb
# 2. Add the following to your Capfile:
# require 'capistrano/git'
# require './lib/capistrano/submodule_strategy'
# 3. Add the following to your config/deploy.rb
# set :git_strategy, SubmoduleStrategy
# 4. Add .capignore file and list each file or directory to exclude from deployment on a separate line. Example:
# .capignore
# lib
# config
# .git
module SubmoduleStrategy
# do all the things a normal capistrano git session would do
include Capistrano::Git::DefaultStrategy
# check for a .git directory
def test
test! " [ -d #{repo_path}/.git ] "
end
# same as in Capistrano::Git::DefaultStrategy
def check
test! :git, :'ls-remote', repo_url
end
def clone
git :clone, '-b', fetch(:branch), '--recursive', repo_url, repo_path
end
# same as in Capistrano::Git::DefaultStrategy
def update
git :remote, :update
end
# put the working tree in a release-branch,
# make sure the submodules are up-to-date
# and copy everything to the release path
def release
release_branch = fetch(:release_branch, File.basename(release_path))
git :checkout, '-B', release_branch,
fetch(:remote_branch, "origin/#{fetch(:branch)}")
git :submodule, :update, '--init'
context.execute "rsync -ar --exclude-from '#{repo_path}/.capignore' #{repo_path}/ #{release_path}"
end
end
@cickes
Copy link
Author

cickes commented Apr 10, 2014

Added option for Capistrano to ignore files when deploying.
OOTB Capistrano 3.1.x uses .gitattributes to accomplish. Due to changes in this fork, that feature was lost.
Can now be replicated by using .capignore file in project root.
List each file or direcotry to ignore on its own line.

.capignore
.git
lib
cap
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment