changeset 881:b4e10471e970

bake: Don't create bake jobs for overriden pages.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 17 Jun 2017 09:02:15 -0700
parents 342e3ea24b5d
children acd9c3e8533f
files piecrust/pipelines/page.py
diffstat 1 files changed, 48 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/pipelines/page.py	Thu Jun 15 22:55:32 2017 -0700
+++ b/piecrust/pipelines/page.py	Sat Jun 17 09:02:15 2017 -0700
@@ -26,6 +26,54 @@
                                     force=self.ctx.force)
         self._pagebaker.startWriterQueue()
 
+    def createJobs(self, ctx):
+        used_paths = {}
+        for rec in ctx.record_histories.current.records:
+            src_name = rec.name.split('@')[0]
+            for e in rec.getEntries():
+                paths = e.getAllOutputPaths()
+                if paths is not None:
+                    for p in paths:
+                        used_paths[p] = (src_name, e)
+
+        jobs = []
+        route = self.source.route
+        pretty_urls = self.app.config.get('site/pretty_urls')
+        record = ctx.record_histories.current.getRecord(self.record_name)
+
+        for item in self.source.getAllContents():
+            route_params = item.metadata['route_params']
+            uri = route.getUri(route_params)
+            path = self._pagebaker.getOutputPath(uri, pretty_urls)
+            override = used_paths.get(path)
+            if override is not None:
+                override_source_name, override_entry = override
+                override_source = self.app.getSource(override_source_name)
+                if override_source.config['realm'] == \
+                        self.source.config['realm']:
+                    logger.error(
+                        "Page '%s' would get baked to '%s' "
+                        "but is overriden by '%s'." %
+                        (item.spec, path, override_entry.item_spec))
+                else:
+                    logger.debug(
+                        "Page '%s' would get baked to '%s' "
+                        "but is overriden by '%s'." %
+                        (item.spec, path, override_entry.item_spec))
+
+                entry = PagePipelineRecordEntry()
+                entry.item_spec = item.spec
+                entry.flags |= PagePipelineRecordEntry.FLAG_OVERRIDEN
+                record.addEntry(entry)
+
+                continue
+
+            jobs.append(self.createJob(item))
+
+        if len(jobs) > 0:
+            return jobs
+        return None
+
     def mergeRecordEntry(self, record_entry, ctx):
         existing = ctx.record.getEntry(record_entry.item_spec)
         existing.errors += record_entry.errors