У меня есть 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
Эта опция явно проверяет исходный файл. Я думал, что связывание вывода и источника было именно темправило