+ @_must_be_writable
+ @_synchronized
+ def merge(self, other):
+ for k in other.keys():
+ if k in self:
+ if isinstance(self[k], Subcollection) and isinstance(other[k], Subcollection):
+ self[k].merge(other[k])
+ else:
+ if self[k] != other[k]:
+ name = "%s~conflict-%s~" % (k, time.strftime("%Y-%m-%d~%H:%M%:%S",
+ time.gmtime()))
+ self[name] = other[k].clone(self)
+ self.notify(self, name, ADD, self[name])
+ else:
+ self[k] = other[k].clone(self)
+ self.notify(self, k, ADD, self[k])
+