Skip to content

Commit

Permalink
Check for git submodule --recursive support
Browse files Browse the repository at this point in the history
git submodule x --recursive is only supported after git 1.6.5.
  • Loading branch information
nilbus committed Sep 23, 2011
1 parent fa99143 commit a50a4fc
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
6 changes: 4 additions & 2 deletions lib/capistrano/recipes/deploy/scm/git.rb
Expand Up @@ -151,7 +151,8 @@ def checkout(revision, destination)
if false == variable(:git_submodules_recursive)
execute << "#{git} submodule #{verbose} update --init"
else
execute << "#{git} submodule #{verbose} update --init --recursive"
execute << %Q(export GIT_RECURSIVE=$([ ! "`#{git} --version`" \\< "git version 1.6.5" ] && echo --recursive))
execute << "#{git} submodule #{verbose} update --init $GIT_RECURSIVE"
end
end

Expand Down Expand Up @@ -194,7 +195,8 @@ def sync(revision, destination)
if false == variable(:git_submodules_recursive)
execute << "#{git} submodule #{verbose} update --init"
else
execute << "#{git} submodule #{verbose} update --init --recursive"
execute << %Q(export GIT_RECURSIVE=$([ ! "`#{git} --version`" \\< "git version 1.6.5" ] && echo --recursive))
execute << "#{git} submodule #{verbose} update --init $GIT_RECURSIVE"
end
end

Expand Down
6 changes: 3 additions & 3 deletions test/deploy/scm/git_test.rb
Expand Up @@ -40,7 +40,7 @@ def test_checkout

# with submodules
@config[:git_enable_submodules] = true
assert_equal "#{git} clone -q git@somehost.com:project.git /var/www && cd /var/www && #{git} checkout -q -b deploy #{rev} && #{git} submodule -q init && #{git} submodule -q sync && #{git} submodule -q update --init --recursive", @source.checkout(rev, dest).gsub(/\s+/, ' ')
assert_equal "#{git} clone -q git@somehost.com:project.git /var/www && cd /var/www && #{git} checkout -q -b deploy #{rev} && #{git} submodule -q init && #{git} submodule -q sync && export GIT_RECURSIVE=$([ ! \"`#{git} --version`\" \\< \"git version 1.6.5\" ] && echo --recursive) && #{git} submodule -q update --init $GIT_RECURSIVE", @source.checkout(rev, dest).gsub(/\s+/, ' ')
end

def test_checkout_with_verbose_should_not_use_q_switch
Expand Down Expand Up @@ -118,7 +118,7 @@ def test_sync

# with submodules
@config[:git_enable_submodules] = true
assert_equal "cd #{dest} && #{git} fetch -q origin && #{git} fetch --tags -q origin && #{git} reset -q --hard #{rev} && #{git} submodule -q init && for mod in `#{git} submodule status | awk '{ print $2 }'`; do #{git} config -f .git/config submodule.${mod}.url `#{git} config -f .gitmodules --get submodule.${mod}.url` && echo Synced $mod; done && #{git} submodule -q sync && #{git} submodule -q update --init --recursive && #{git} clean -q -d -x -f", @source.sync(rev, dest)
assert_equal "cd #{dest} && #{git} fetch -q origin && #{git} fetch --tags -q origin && #{git} reset -q --hard #{rev} && #{git} submodule -q init && for mod in `#{git} submodule status | awk '{ print $2 }'`; do #{git} config -f .git/config submodule.${mod}.url `#{git} config -f .gitmodules --get submodule.${mod}.url` && echo Synced $mod; done && #{git} submodule -q sync && export GIT_RECURSIVE=$([ ! \"`#{git} --version`\" \\< \"git version 1.6.5\" ] && echo --recursive) && #{git} submodule -q update --init $GIT_RECURSIVE && #{git} clean -q -d -x -f", @source.sync(rev, dest)
end

def test_sync_with_remote
Expand Down Expand Up @@ -155,7 +155,7 @@ def test_remote_clone_with_submodules
@config[:git_enable_submodules] = true
dest = "/var/www"
rev = 'c2d9e79'
assert_equal "git clone -q -o username git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev} && git submodule -q init && git submodule -q sync && git submodule -q update --init --recursive", @source.checkout(rev, dest)
assert_equal "git clone -q -o username git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev} && git submodule -q init && git submodule -q sync && export GIT_RECURSIVE=$([ ! \"`git --version`\" \\< \"git version 1.6.5\" ] && echo --recursive) && git submodule -q update --init $GIT_RECURSIVE", @source.checkout(rev, dest)
end

# Tests from base_test.rb, makin' sure we didn't break anything up there!
Expand Down

1 comment on commit a50a4fc

@leehambley
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nilbus I really like this proposed solution, I'll respond to the pull request this evening, or tomorrow morning, but so far looks like a nice fix.

Please sign in to comment.