From 82b25ec0c30fb0a140f3c4c8b2440c7e19b181db Mon Sep 17 00:00:00 2001 From: Igor Rzegocki Date: Mon, 25 Apr 2016 13:38:55 +0200 Subject: [PATCH] Added optional removal of scm files --- README.md | 4 ++++ attributes/default.rb | 5 +++++ libraries/drivers_scm_base.rb | 3 ++- libraries/drivers_scm_git.rb | 2 +- recipes/deploy.rb | 4 ++-- spec/fixtures/node.rb | 3 +++ spec/unit/libraries/drivers_scm_git_spec.rb | 3 ++- 7 files changed, 19 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d6b85f0b..07350942 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,10 @@ you don't need to provide them here. Currently only `git` is supported. * **Supported values:** `git` * **Default:** `git` * SCM used by the cookbook to clone the repo. +* `app['scm']['remove_scm_files']` + * **Supported values:** `true`, `false` + * **Default:** `true` + * If set to true, all SCM leftovers (like `.git`) will be removed. * `app['scm']['repository']` * Repository URL * `app['scm']['revision']` diff --git a/attributes/default.rb b/attributes/default.rb index c6c797a5..e5209a4e 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -21,6 +21,11 @@ nginx::http_stub_status_module ) +# scm +## common + +default['defaults']['scm']['remove_scm_files'] = true + # appserver ## common diff --git a/libraries/drivers_scm_base.rb b/libraries/drivers_scm_base.rb index 371284ce..5dca0cfe 100644 --- a/libraries/drivers_scm_base.rb +++ b/libraries/drivers_scm_base.rb @@ -26,7 +26,8 @@ def raw_out end def out_defaults - base = JSON.parse((node['deploy'][app['shortname']]['scm'] || {}).to_json, symbolize_names: true) + base = node['defaults']['scm'].to_h.symbolize_keys + base = base.merge(JSON.parse((node['deploy'][app['shortname']]['scm'] || {}).to_json, symbolize_names: true)) defaults.merge(base).merge(scm_provider: adapter.constantize) end diff --git a/libraries/drivers_scm_git.rb b/libraries/drivers_scm_git.rb index cc3bb02f..d62fc4a4 100644 --- a/libraries/drivers_scm_git.rb +++ b/libraries/drivers_scm_git.rb @@ -5,7 +5,7 @@ class Git < Drivers::Scm::Base adapter Chef::Provider::Git allowed_engines :git packages :git - output filter: [:scm_provider, :repository, :revision, :enable_submodules, :ssh_wrapper] + output filter: [:scm_provider, :repository, :revision, :enable_submodules, :ssh_wrapper, :remove_scm_files] defaults enable_submodules: true, ssh_wrapper: '/tmp/ssh-git-wrapper.sh' def before_deploy(context) diff --git a/recipes/deploy.rb b/recipes/deploy.rb index c95d6404..148d4417 100644 --- a/recipes/deploy.rb +++ b/recipes/deploy.rb @@ -40,7 +40,7 @@ symlinks(node['defaults']['deploy']['symlinks'].merge(deploy[:symlinks] || {})) scm.out.each do |scm_key, scm_value| - send(scm_key, scm_value) + send(scm_key, scm_value) if respond_to?(scm_key) end [appserver, webserver].each do |server| @@ -69,7 +69,7 @@ directory File.join(release_path, '.git') do recursive true action :delete - end + end if scm.out[:remove_scm_files] run_callback_from_file(File.join(release_path, 'deploy', 'before_restart.rb')) end diff --git a/spec/fixtures/node.rb b/spec/fixtures/node.rb index 26b56cb1..f09f9fcc 100644 --- a/spec/fixtures/node.rb +++ b/spec/fixtures/node.rb @@ -64,6 +64,9 @@ def node(override = {}) create_dirs_before_symlink: %w(tmp public config ../../shared/cache ../../shared/assets), purge_before_symlink: %w(log tmp/cache tmp/pids public/system public/assets) }, + scm: { + remove_scm_files: true + }, appserver: { adapter: 'unicorn', worker_processes: 8 diff --git a/spec/unit/libraries/drivers_scm_git_spec.rb b/spec/unit/libraries/drivers_scm_git_spec.rb index 3adb9476..dfb76a7d 100644 --- a/spec/unit/libraries/drivers_scm_git_spec.rb +++ b/spec/unit/libraries/drivers_scm_git_spec.rb @@ -91,7 +91,8 @@ revision: 'master', repository: 'git@git.example.com:repo/project.git', enable_submodules: false, - ssh_wrapper: 'ssh-wrap' + ssh_wrapper: 'ssh-wrap', + remove_scm_files: true ) end