[Zope3-checkins] CVS: Zope3/src/zodb/storage - bdbfull.py:1.18

Barry Warsaw barry@wooz.org
Fri, 14 Mar 2003 15:44:50 -0500


Update of /cvs-repository/Zope3/src/zodb/storage
In directory cvs.zope.org:/tmp/cvs-serv26032

Modified Files:
	bdbfull.py 
Log Message:
_dostore(), _undo_to_same_pickle(): Conflict resolution now returns a
2-tuple of the data and the refs (as a list of oids).

_doundo(): We have to join the list of oids in refs for storage.


=== Zope3/src/zodb/storage/bdbfull.py 1.17 => 1.18 ===
--- Zope3/src/zodb/storage/bdbfull.py:1.17	Fri Mar 14 12:18:52 2003
+++ Zope3/src/zodb/storage/bdbfull.py	Fri Mar 14 15:44:50 2003
@@ -497,7 +497,7 @@
             # given in the call is not the same as the last stored serial
             # number.  First, attempt application level conflict
             # resolution, and if that fails, raise a ConflictError.
-            data = self._conflict.resolve(oid, oserial, serial, data)
+            data, refs = self._conflict.resolve(oid, oserial, serial, data)
             conflictresolved = True
         # Do we already know about this version?  If not, we need to record
         # the fact that a new version is being created.  version will be the
@@ -1145,11 +1145,8 @@
         else:
             # Attempt application level conflict resolution
             try:
-                # XXX this needs to be converted to opaque pickles
-                data = self._conflict.resolve(
+                data, refs = self._conflict.resolve(
                     oid, ctid, tid, self._pickles[oid+target_lrevid])
-                from zodb.serialize import findrefs
-                refs = ''.join(findrefs(data))
             except ConflictError:
                 raise UndoError, 'Cannot undo transaction'
             return oid, target_metadata, data, refs
@@ -1197,7 +1194,7 @@
                 # data and refs go hand in hand
                 assert refs is not None
                 self._pickles.put(revid, data, txn=txn)
-                self._references.put(revid, refs, txn=txn)
+                self._references.put(revid, EMPTYSTRING.join(refs), txn=txn)
                 metadata = vid+nvrevid+newserial+prevrevid
             else:
                 # data and refs go hand in hand