diff options
| -rw-r--r-- | common/src/leap/soledad/common/couch/__init__.py | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/common/src/leap/soledad/common/couch/__init__.py b/common/src/leap/soledad/common/couch/__init__.py index ca0c2855..ba3192a4 100644 --- a/common/src/leap/soledad/common/couch/__init__.py +++ b/common/src/leap/soledad/common/couch/__init__.py @@ -714,7 +714,18 @@ class CouchDatabase(object):          if not self.batching:              buf = StringIO()              envelope = MultipartWriter(buf) -            envelope.add('application/json', json.dumps(couch_doc)) +            # the order in which attachments are described inside the +            # serialization of the couch document must match the order in which +            # they are actually written in the multipart structure. Because of +            # that, we use `sorted_keys=True` in the json serialization (so +            # "u1db_conflicts" comes before "u1db_content" on the couch +            # document attachments description), and also reverse the order of +            # the parts before writing them, so the "conflict" part is written +            # before the "content" part. +            envelope.add( +                'application/json', +                json.dumps(couch_doc, sort_keys=True)) +            parts.reverse()              for part in parts:                  envelope.add('application/octet-stream', part)              envelope.close()  | 
