30
30
from nikola import utils
31
31
32
32
33
- def update_deps (post , lang , task ):
33
+ def update_deps (post , lang , deps_dict , timeline , task ):
34
34
"""Updates file dependencies as they might have been updated during compilation.
35
35
36
36
This is done for example by the ReST page compiler, which writes its
@@ -40,10 +40,6 @@ def update_deps(post, lang, task):
40
40
task .file_dep .update ([p for p in post .fragment_deps (lang ) if not p .startswith ("####MAGIC####" )])
41
41
42
42
43
- def dependence_on_timeline (post , lang ):
44
- return "####MAGIC####TIMELINE" not in post .fragment_deps (lang )
45
-
46
-
47
43
class RenderPosts (Task ):
48
44
"""Build HTML fragments from metadata and text."""
49
45
@@ -59,13 +55,25 @@ def gen_tasks(self):
59
55
"show_untranslated_posts" : self .site .config ['SHOW_UNTRANSLATED_POSTS' ],
60
56
"demote_headers" : self .site .config ['DEMOTE_HEADERS' ],
61
57
}
58
+ self .tl_changed = False
62
59
63
60
yield self .group_task ()
64
61
62
+ def tl_ch ():
63
+ self .tl_changed = True
64
+
65
+ yield {
66
+ 'basename' : self .name ,
67
+ 'name' : 'timeline_changes' ,
68
+ 'actions' : [tl_ch ],
69
+ 'uptodate' : [utils .config_changed (str (kw ['timeline' ]))],
70
+ }
71
+
65
72
for lang in kw ["translations" ]:
66
73
deps_dict = copy (kw )
67
74
deps_dict .pop ('timeline' )
68
75
for post in kw ['timeline' ]:
76
+
69
77
dest = post .translated_base_path (lang )
70
78
file_dep = [p for p in post .fragment_deps (lang ) if not p .startswith ("####MAGIC####" )]
71
79
task = {
@@ -74,12 +82,20 @@ def gen_tasks(self):
74
82
'file_dep' : file_dep ,
75
83
'targets' : [dest ],
76
84
'actions' : [(post .compile , (lang , )),
77
- (update_deps , (post , lang , )),
85
+ (update_deps , (post , lang , deps_dict , kw [ 'timeline' ], )),
78
86
],
79
87
'clean' : True ,
80
88
'uptodate' : [
81
89
utils .config_changed (deps_dict , 'nikola.plugins.task.posts' ),
82
- lambda p = post , l = lang : dependence_on_timeline (p , l )
90
+ lambda p = post , l = lang : self . dependence_on_timeline (p , l )
83
91
] + post .fragment_deps_uptodate (lang ),
92
+ 'task_dep' : ['render_posts:timeline_changes' ]
84
93
}
85
94
yield task
95
+
96
+ def dependence_on_timeline (self , post , lang ):
97
+ if "####MAGIC####TIMELINE" not in post .fragment_deps (lang ):
98
+ return True # No dependency on timeline
99
+ elif self .tl_changed :
100
+ return False # Timeline changed
101
+ return True
0 commit comments