Tareas sintetizadas de rastrillo y verificación de fecha de archivo
Pregunta
Tengo un filtro de rastrillo que estoy usando para generar HTML a partir de Markdown (y hacer otras cosas irrelevantes para la pregunta.
Estoy generando archivos desde mi fuente,. Freeure Arches (en Filelist DOCUMENTS
), en mi directorio de salida OUTPUT
como html. Yo tengo un htmlfile
Método para ensamblar y escribir mi archivo HTML.
Estoy probando dos opciones alternativas aquí:
Tareas de archivo:
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
Tareas de archivo sintetizadas con una regla:
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
Entiendo que la última opción sintetizaría tareas de archivo y tendría el mismo efecto neto. Sin embargo, encuentro que si lo elijo, no hace frente a la construcción incremental, mientras que la primera opción sí.
Si construyo, luego modifique un archivo, luego ejecute RAKE -Trace Obtengo lo siguiente:
Con tareas sintetizadas:
** Invoke output/Module/Feature.html (first_time, not_needed)
** Invoke output/Module (not_needed)
Y con las tareas de archivo explícitas:
** 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
Esta opción está claramente revisando el archivo de origen. Pensé que vincular la salida y la fuente era exactamente qué regla
Solución
(Creo que es más útil poner la respuesta como una respuesta real, en lugar de un comentario. Ver https://meta.stackexchange.com/questions/68507/what--do-if-you-find-the-answer-to-your-ocestion)
Resulta que si tienes file outdoc => something
En otra parte de su archivo de rastrillo, se meterá con las tareas sintetizadas. Mientras que si tiene tareas de archivo para esos documentos de salida, se suma a los requisitos previos y funciona bien. Este tipo de tiene sentido; Las tareas sintetizadas realmente no existen.
También descubrí que las reglas solo funcionan a un nivel de inferencia ( http://onestepback.org/articles/buildingwithrake/rulelimitations.html) aunque esa no resultó ser la respuesta.
Solución: reorganice los requisitos previos de las tareas, o use las tareas de archivo explícitas.