diff --git a/CHANGELOG.md b/CHANGELOG.md index f7f92397..540ecc7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ https://github.com/capistrano/capistrano/compare/v3.4.0...HEAD * Minor changes * Fix filtering behaviour when using literal hostnames in on() block (@townsen) * Added options to set username and password when using Subversion as SCM (@dsthode) + * Allow after() to refer to tasks that have not been loaded yet (@jcoglan) ## `3.4.0` diff --git a/lib/capistrano/dsl/task_enhancements.rb b/lib/capistrano/dsl/task_enhancements.rb index 940785ba..18cbb8ff 100644 --- a/lib/capistrano/dsl/task_enhancements.rb +++ b/lib/capistrano/dsl/task_enhancements.rb @@ -9,9 +9,8 @@ module Capistrano def after(task, post_task, *args, &block) Rake::Task.define_task(post_task, *args, &block) if block_given? - post_task = Rake::Task[post_task] Rake::Task[task].enhance do - post_task.invoke + Rake::Task[post_task].invoke end end diff --git a/spec/lib/capistrano/dsl/task_enhancements_spec.rb b/spec/lib/capistrano/dsl/task_enhancements_spec.rb index 2c960fb2..b2a1c69a 100644 --- a/spec/lib/capistrano/dsl/task_enhancements_spec.rb +++ b/spec/lib/capistrano/dsl/task_enhancements_spec.rb @@ -54,6 +54,18 @@ module Capistrano expect(order).to eq(['before_task', 'task', 'after_task']) end + it 'invokes in proper order when referring to as-yet undefined tasks' do + task_enhancements.after('task', 'not_loaded_task') + + Rake::Task.define_task('not_loaded_task') do + order.push 'not_loaded_task' + end + + Rake::Task['task'].invoke order + + expect(order).to eq(['task', 'not_loaded_task']) + end + it 'invokes in proper order and with arguments and block' do task_enhancements.after('task', 'after_task_custom', :order) do |t, args| order.push 'after_task'