-
-
Save stevenscg/8176735 to your computer and use it in GitHub Desktop.
# this include won't work for some reason: | |
# include Capistrano::Git::DefaultStrategy | |
module SubmoduleStrategy | |
# 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=.git\* #{repo_path}/ #{release_path}" | |
end | |
end |
How to use this?
I had to use "-B" in git :checkout as I kept running into an error saying the branch already existed, but I haven't been able to track down where that problem originates.
Also, I'm curious whether or not the
git :submodule, :update, "--init"
is necessary in release given that we're doing git clone --recursive in clone.
I guess the branch must be coming from fetch(:branch) in clone. It's working now so I'm probably not going to dig deeper.
I forked this, fixed a couple bugs and added some basic documentation feel free to merge it if you want.
@ngottlieb: If you're requiring 'capistrano/git', you're causing the git rake tasks to be loaded twice. Rake appends new definitions on to the old ones rather than replacing them, so if you load the tasks twice, everything in them gets run twice.
First, the include needs to be inside the module definition. Second, you might need to require 'capistrano/git'.