Rake синтезированные задачи и проверка даты файла - PullRequest
1 голос
/ 28 января 2011

У меня есть Rakefile, который я использую для генерации HTML из уценки (и делаю другие вещи, которые не имеют отношения к вопросу.

Я генерирую файлы из моего источника, файлы .feature (в FileListDOCUMENTS), в мою выходную директорию OUTPUT как HTML. У меня есть метод htmlfile для сборки и записи моего HTML-файла.

Я пробую здесь два альтернативных варианта:

Файловые задачи:

DOCUMENTS.each do |doc|
  file doc.pathmap("#{OUTPUT}/%X.html") => doc do |t|
    htmlfile t.name, RDiscount.new(F.read doc).to_html, t.name.pathmap('%n')
  end
end

Синтезированные файловые задачи с правилом:

rule '.html' => proc {|html| html.pathmap("%{#{OUTPUT}/,}X.feature")} do |t|
  htmlfile t.name, RDiscount.new(F.read t.source).to_html, t.name.pathmap('%n')
end

Насколько я понимаю, последний вариант будет синтезировать файловые задачи и иметь тот же сетевой эффект. Однако яобнаружив, что если я выберу его, он не справится с инкрементным построением, тогда как первый вариант это сделает.

Если я собрал, то изменил один файл и запустил rake --trace, я получил следующее:

С синтезированными задачами:

** Invoke output/Module/Feature.html (first_time, not_needed)
** Invoke output/Module (not_needed)

И с явными файловыми задачами:

** Invoke output/Module/Feature.html (first_time)
** Invoke output/Module (not_needed)
** Invoke Module/Feature.feature (first_time, not_needed)
** Execute output/Module/Feature.html

Эта опция явно проверяет исходный файл. Я думал, что связывание вывода и источника было именно темправило

1 Ответ

4 голосов
/ 28 января 2011

(Я считаю, что наиболее полезно поместить ответ в качестве фактического ответа, а не комментария. См. https://meta.stackexchange.com/questions/68507/what-to-do-if-you-find-the-answer-to-your-own-question)

Оказывается, что если у вас есть file outdoc => something в другом месте в вашем Rakefile, он будетвозиться с синтезированными задачами. Принимая во внимание, что если у вас есть файловые задачи для этих выходных документов, это добавляет предварительные требования и работает нормально. Этот вид имеет смысл; синтезированные задачи на самом деле не существуют.

Я также выяснил,эти правила работают только с одним уровнем логического вывода (http://onestepback.org/articles/buildingwithrake/rulelimitations.html), хотя это и не оказалось ответом.

Исправлено: переставлять предварительные условия задач или использовать явные файловые задачи.

...