diff --git a/lib/capistrano/dsl/paths.rb b/lib/capistrano/dsl/paths.rb index 0366eb30..83434616 100644 --- a/lib/capistrano/dsl/paths.rb +++ b/lib/capistrano/dsl/paths.rb @@ -42,6 +42,22 @@ module Capistrano def asset_timestamp env.timestamp.strftime("%Y%m%d%H%M.%S") end + + def linked_dirs(parent) + fetch(:linked_dirs, []).map { |dir| parent.join(dir) } + end + + def linked_files(parent) + fetch(:linked_files, []).map { |file| parent.join(file) } + end + + def linked_file_dirs(parent) + linked_files(parent).map { |file| file.dirname } + end + + def linked_dir_parents(parent) + linked_dirs(parent).map { |dir| dir.dirname } + end end end end diff --git a/lib/capistrano/tasks/deploy.rake b/lib/capistrano/tasks/deploy.rake index e2ecb374..b0ffced6 100644 --- a/lib/capistrano/tasks/deploy.rake +++ b/lib/capistrano/tasks/deploy.rake @@ -36,21 +36,16 @@ namespace :deploy do desc 'Check directories to be linked exist in shared' task :linked_dirs do on roles :app do - fetch(:linked_dirs).each do |dir| - dir = shared_path.join(dir) - execute :mkdir, '-pv', dir - end + execute :mkdir, '-pv', linked_dirs(shared_path) end end desc 'Check files to be linked exist in shared' task :linked_files do on roles :app do |host| - fetch(:linked_files).each do |file| - file_path = shared_path.join(file) - parent = file_path.dirname - execute :mkdir, '-pv', parent - unless test "[ -f #{file_path} ]" + execute :mkdir, '-pv', linked_file_dirs(shared_path) + linked_files(shared_path).each do |file| + unless test "[ -f #{file} ]" error t(:linked_file_does_not_exist, file: file, host: host) exit 1 end @@ -77,11 +72,11 @@ namespace :deploy do desc 'Symlink linked directories' task :linked_dirs do on roles :app do + execute :mkdir, '-pv', linked_dir_parents(release_path) + fetch(:linked_dirs).each do |dir| target = release_path.join(dir) source = shared_path.join(dir) - parent = target.dirname - execute :mkdir, '-pv', parent unless test "[ -L #{target} ]" if test "[ -f #{target} ]" execute :rm, '-rf', target @@ -95,11 +90,11 @@ namespace :deploy do desc 'Symlink linked files' task :linked_files do on roles :app do + execute :mkdir, '-pv', linked_file_dirs(release_path) + fetch(:linked_files).each do |file| target = release_path.join(file) source = shared_path.join(file) - parent = target.dirname - execute :mkdir, '-pv', parent unless test "[ -L #{target} ]" if test "[ -f #{target} ]" execute :rm, target