diff --git a/lib/itamae/resource/git.rb b/lib/itamae/resource/git.rb index b308fa1f..5f5b3450 100644 --- a/lib/itamae/resource/git.rb +++ b/lib/itamae/resource/git.rb @@ -9,6 +9,7 @@ class Git < Base define_attribute :destination, type: String, default_name: true define_attribute :repository, type: String, required: true define_attribute :revision, type: String + define_attribute :recursive, default: false def pre_action case @current_action @@ -29,7 +30,10 @@ def action_sync(options) if run_specinfra(:check_file_is_directory, attributes.destination) run_command_in_repo(['git', 'fetch', 'origin']) else - run_command(['git', 'clone', attributes.repository, attributes.destination]) + cmd = ['git', 'clone'] + cmd << '--recursive' if attributes.recursive + cmd << attributes.repository << attributes.destination + run_command(cmd) new_repository = true end diff --git a/spec/integration/default_spec.rb b/spec/integration/default_spec.rb index e9d06713..ffd12a58 100644 --- a/spec/integration/default_spec.rb +++ b/spec/integration/default_spec.rb @@ -109,6 +109,10 @@ its(:stdout) { should match(/3116e170b89dc0f7315b69c1c1e1fd7fab23ac0d/) } end +describe command('cd /tmp/git_repo_submodule/empty_repo && cat README.md') do + its(:stdout) { should match(/Empty Repo/) } +end + describe file('/tmp/created_by_itamae_user') do it { should be_file } it { should be_owned_by 'itamae' } diff --git a/spec/integration/recipes/default.rb b/spec/integration/recipes/default.rb index b9871f48..71002048 100644 --- a/spec/integration/recipes/default.rb +++ b/spec/integration/recipes/default.rb @@ -211,6 +211,11 @@ revision "v0.1.0" end +git "/tmp/git_repo_submodule" do + repository "https://github.com/mmasaki/fake_repo_including_submodule.git" + recursive true +end + ##### execute "echo -n $HOME > /tmp/created_by_itamae_user" do