2017-01-20 3 views
0

AFAIK, Rake поставляется с двумя типами задач: Rake::Task, который выполняется безоговорочно, и Rake::FileTask, который запускается только в том случае, если файл, который он назван в имени, не существует или является старше одного из его предварительных условий.Настройка «необходимо?» условие для задачи Rake

Есть ли обычный способ настроить логику, которая решает, должна ли выполняться задача? Например, если бы я хотел не только проверить существование файла, но и каким-то образом проверить его содержимое.

Я вижу, что метод Rake::Task#needed? обрабатывает это, и переопределение этого в подклассе действительно работает. Но есть ли более идиоматический способ сделать это? Что-то, что было бы более целесообразно включить непосредственно в Rakefile?

я себе что-то вроде этого:

need :process do 
    # Check if file is already processed 
end 

task :process do 
    # Process file in-place 
end 

который бы пропустить задание, если все его need блоков возвращает истину.

ответ

1

Есть ли обычный способ настроить логику, которая решает, должна ли выполняться задача ?

Да; способ сделать это:

  • объявить «необходимые задачи», как task_1, и пусть это exist если таковые необходимые операции не протекала
  • объявить «вторичные задачи» как task_2 с prerequisite: task_1

поэтому файл rake будет как:

# check if needed is done 
def needed_done?  
    return false # TODO: edit checking logic 
end 

desc "do prerequisite stuff" 
task :do_needed do 
    p "do needed stuff" 
    unless needed_done? 
    p "needed stuff wasn't done ^^'" 
    exit 1 
    end 
end 

desc "process other stuff, if prerequisite is meet" 
task :process => [:do_needed] do 
    p "process other stuff" 
end 

теперь, когда вы запускали задачу process с:

rake process 

do_needed автоматически побежал первым, если needed_done? тогда process будет работать, иначе вы выйдете, не запуская его

Смежные вопросы