Моим определением был бы язык, который обычно распределяется как источник, а не как двоичный файл.
Публикация этого как нового ответа, чтобы оставался доступным другой. Это гораздо менее элегантно, так как мне нужно проникнуть в глубины Rake и вручную обновить список задач, но он работает.
task :test1 do
puts 'test1'
end
task :test2 do
puts 'test2'
end
task :after do
puts 'after'
end
# top_level_tasks is't writable so we need to do this ugly
# instance_variable_set hack...
current_tasks = Rake.application.top_level_tasks
current_tasks << :after
Rake.application.instance_variable_set(:@top_level_tasks, current_tasks)
Выводы:
$ rake test1
test1
after
$ rake test1 test2
test1
test2
after
Я не знаю, лучший ли это способ, но он проще:
Сделайте все свои «общедоступные задачи» сводными, которые вызывают реальные задачи.
task :compile => :realcompile do
summary stuff
end
Вы сможете сделать это с помощью'hance ':
Rake::Task["my_task"].enhance do
Rake::Task["my_after_task"].invoke
end
Это вызовет вызов' my_after_task 'после' my_task '.
Если вы хотите применить это ко всем задачам, просто переберите все задачи и улучшения вызова для каждого:
Rake::Task.tasks.each do |t|
t.enhance do
Rake::Task["my_after_task"].invoke
end
end
Полный тестовый файл:
task :test1 do
puts 'test1'
end
task :test2 do
puts 'test2'
end
Rake::Task.tasks.each do |t|
t.enhance do
puts 'after'
end
end
И вывод:
$ rake test1
test1
after
$ rake test2
test2
after