Si j'ai une tâche définie dans mon Rakefile qui ressemble à ceci:Existe-t-il un moyen d'attacher des puts/logs de liaison tardive aux tâches de rake?
MyLibrary::CopySrcTask.new(:copySrc) do |task|
puts "Copying source"
task.src_dir = 'src/'
task.destination = 'build/lib/'
end
Je suis venu à réaliser que le puts
dans la tâche ci-dessus seront sont exécutées même si je spécifie une cible de coupe pour laquelle cette tâche :copySrc
est et non exécutée. Je me demande s'il existe un moyen de spécifier le puts
d'une manière tardive de sorte qu'il ne soit exécuté que si/quand la tâche rake elle-même est exécutée?
Cela peut ne pas sembler une grosse affaire, mais il serait certainement permettre le débogage plus facile, et de plus, il devient une affaire beaucoup plus si l'on considère un cas comme celui-ci:
MyLibrary::CopySrcTask.new(:copySrc) do |task|
task.src_dir = complex_function_which_affects_filesystem()
task.destination = 'build/lib/'
end
maintenant dans ce cas , c'est essentiellement le même problème qu'avec le puts
évalué même si la tâche n'est pas exécutée, mais maintenant au lieu d'un appel puts
superflu, il fait une opération entière qui salit le système de fichiers. Est-il possible de faire en sorte que tout ce code à l'intérieur de l'initialisation de la tâche ne soit exécuté que lorsque la tâche elle-même est exécutée?
Si quelque chose comme ça fonctionnerait, ce serait génial:
MyLibrary::CopySrcTask.new(:copySrc) do |task|
lambda do # this code will only be run if the task gets run
puts "Copying source"
task.src_dir = complex_function_which_affects_filesystem()
task.destination = 'build/lib/'
end
end
Je note que la tâche que je me sers est d'une bibliothèque, donc je ne peux pas modifier la tâche elle-même.