diff piecrust/records.py @ 133:9e4c2e68a129

Optimize server for files that already exist. * Only try to find new assets if no previously existing asset or page could be used. * Tidy up a bit the API for passing and returning bake/process records. * Put the process record in its place.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 18 Nov 2014 21:32:04 -0800
parents 133845647083
children c132a2cba521
line wrap: on
line diff
--- a/piecrust/records.py	Tue Nov 18 21:29:12 2014 -0800
+++ b/piecrust/records.py	Tue Nov 18 21:32:04 2014 -0800
@@ -79,22 +79,38 @@
             self.previous = self._record_class()
             return
 
-        for e in self.previous.entries:
-            key = self.getTransitionKey(e)
-            self.transitions[key] = (e, None)
+        self._rebuildTransitions()
+
+    def setPrevious(self, previous_record):
+        self.previous = previous_record
+        self._rebuildTransitions()
 
     def clearPrevious(self):
-        self.previous = self._record_class()
+        self.setPrevious(self._record_class())
 
     def saveCurrent(self, current_path):
         self.current.save(current_path)
 
+    def detach(self):
+        res = self.current
+        self.current.entry_added -= self._onCurrentEntryAdded
+        self.current = None
+        self.previous = None
+        self.transitions = {}
+        return res
+
     def addEntry(self, entry):
         self.current.addEntry(entry)
 
     def getTransitionKey(self, entry):
         raise NotImplementedError()
 
+    def _rebuildTransitions(self):
+        self.transitions = {}
+        for e in self.previous.entries:
+            key = self.getTransitionKey(e)
+            self.transitions[key] = (e, None)
+
     def _onCurrentEntryAdded(self, entry):
         key = self.getTransitionKey(entry)
         te = self.transitions.get(key)