- (BOOL)mergeConflictedDocument:(CBLDocument *)doc {
NSError* error;
NSArray* conflicts = [doc getConflictingRevisions: &error];
if (conflicts.count > 1) {
// There is more than one current revision, thus a conflict!
[self.couchDatabase inTransaction: ^BOOL{
// Come up with a merged/resolved document in some way that's
// appropriate for the app. You could even just pick the body of
// one of the revisions.
NSDictionary* mergedProps = [self mergeRevisions:conflicts];
// Delete the conflicting revisions to get rid of the conflict:
CBLSavedRevision* current = doc.currentRevision;
for (CBLSavedRevision* rev in conflicts) {
CBLUnsavedRevision *newRev = [rev createRevision];
if (rev == current) {
// add the merged revision
newRev.properties = [NSMutableDictionary dictionaryWithDictionary: mergedProps];
for (CBLAttachment *attachment in rev.attachments) {
[newRev setAttachmentNamed:attachment.name
withContentType:attachment.contentType
content:attachment.content];
}
} else {
// mark other conflicts as deleted
newRev.isDeletion = YES;
}
// saveAllowingConflict allows 'rev' to be updated even if it
// is not the document's current revision.
NSError *error = nil;
if (![newRev saveAllowingConflict: &error]) {
TFFLog(@"Error saving conflicted document: %@", error);
return NO;
}
}
return YES;
}];
}
return YES;
}
CBLSavedRevision[rec-..fb1b/1-4098dccaa969cdbab64825e687aaec68],
CBLSavedRevision[rec-..fb1b/4206-5128082a4eb2783ba5e60116f84f7e07]
On Apr 14, 2016, at 1:19 PM, Brendan Duddridge <bren...@gmail.com> wrote:
CBLSavedRevision[rec-..fb1b/1-4098dccaa969cdbab64825e687aaec68],
CBLSavedRevision[rec-..fb1b/4206-5128082a4eb2783ba5e60116f84f7e07]
But each time through the above loop, a new revision is being added, so 4206 becomes 4207, ... n. and so on.
On Apr 14, 2016, at 1:55 PM, Brendan Duddridge <bren...@gmail.com> wrote:
Sorry, I meant to say "the new revision is getting its "isDeletion" flag set to YES".Maybe that's the problem? But I can't set the isDeletion flag unless I create a new revision it seems. So that 1-409 is never going away and I just keep creating new revisions over and over.
(lldb) po conflicts
<__NSArrayI 0x610000020720>(
CBLSavedRevision[rec-..fb1b/1-4098dccaa969cdbab64825e687aaec68],
CBLSavedRevision[rec-..fb1b/4256-205cb128a6a5dfd1928ee4a6d38aa1f9]
)
(lldb) po [doc getConflictingRevisions:nil]
<__NSArrayI 0x608000024160>(
CBLSavedRevision[rec-..fb1b/4256-205cb128a6a5dfd1928ee4a6d38aa1f9]
)
CBLSavedRevision[rec-..fb1b/2-a106816d32bc283bc24acf98abeeec2d]
CBLSavedRevision[rec-..fb1b/4257-f4359eb63dc53f74a997adc1f606cd73]
(lldb) po [doc getConflictingRevisions:nil]
<__NSArrayI 0x6080000255a0>(
CBLSavedRevision[rec-..fb1b/4257-f4359eb63dc53f74a997adc1f606cd73]
)
<__NSArrayI 0x610000020860>(
CBLSavedRevision[rec-..fb1b/1-4098dccaa969cdbab64825e687aaec68],
CBLSavedRevision[rec-..fb1b/4257-f4359eb63dc53f74a997adc1f606cd73]
)
(lldb) po [savedRevison properties]
{
"_deleted" = 1;
"_id" = "rec-a0ada90ce645458ebdb3ff7259c6fb1b";
"_rev" = "2-a106816d32bc283bc24acf98abeeec2d";
dateCreated = "2016-04-12T05:07:38.866Z";
dateModified = "2016-04-12T05:07:38.866Z";
dbID = "db-1deccd0e15dc4047ab96eba344144f3b";
form = "frm-19f6c15c8f7f45c5a586d99685549697";
type = "frm-19f6c15c8f7f45c5a586d99685549697";
values = {
"fld-08c6bd02523b41899614960ddd45bee6" = Fawcett;
.... lots of other values here I removed for this post ....
};
}
(lldb) po [savedRevison properties]
{
"_id" = "rec-a0ada90ce645458ebdb3ff7259c6fb1b";
"_rev" = "4257-f4359eb63dc53f74a997adc1f606cd73";
dateCreated = "2016-04-12T05:07:38.866Z";
dateModified = "2016-04-14T18:56:25.522Z";
dbID = "db-1deccd0e15dc4047ab96eba344144f3b";
form = "frm-19f6c15c8f7f45c5a586d99685549697";
type = "frm-19f6c15c8f7f45c5a586d99685549697";
values = {
};
}
Database: Begin transaction (level 1)...
Tap Forms[29851:8985729] is deletion: 1
Database: PUT _id=rec-a0ada90ce645458ebdb3ff7259c6fb1b, _rev=1-4098dccaa969cdbab64825e687aaec68, _deleted=1, allowConflict=1
Database: Duplicate rev insertion: rec-a0ada90ce645458ebdb3ff7259c6fb1b / 2-a106816d32bc283bc24acf98abeeec2d
Database: --> created {rec-a0ada90ce645458ebdb3ff7259c6fb1b #2-a106816d32bc283bc24acf98abeeec2d DEL}
Tap Forms[29851:8985729] Saved new revision: 2-a106816d32bc283bc24acf98abeeec2d, parent: (null)
Database: PUT _id=rec-a0ada90ce645458ebdb3ff7259c6fb1b, _rev=4272-a388b5ae2e82576f3bc56bfb1420c94e, _deleted=0, allowConflict=1
Database: Added: {rec-a0ada90ce645458ebdb3ff7259c6fb1b #4273-fce7a57ef00a2a6a243c91b44cb1ade7}
Database: --> created {rec-a0ada90ce645458ebdb3ff7259c6fb1b #4273-fce7a57ef00a2a6a243c91b44cb1ade7}
Tap Forms[29851:8985729] Saved new revision: 4273-fce7a57ef00a2a6a243c91b44cb1ade7, parent: 4272-a388b5ae2e82576f3bc56bfb1420c94e
Database: Commit transaction (level 1)
Database: CBLDatabase[<0x608000121900>db-1deccd0e15dc4047ab96eba344144f3b]: Posting change notifications: seq 123627
Database: CBLDatabase[<0x6100001221c0>db-1deccd0e15dc4047ab96eba344144f3b]: Notified of 1 changes by CBLDatabase[<0x608000121900>db-1deccd0e15dc4047ab96eba344144f3b]
Database: CBLDatabase[<0x6180001258c0>db-1deccd0e15dc4047ab96eba344144f3b]: Notified of 1 changes by CBLDatabase[<0x608000121900>db-1deccd0e15dc4047ab96eba344144f3b]
Database: CBLDatabase[<0x6100001221c0>db-1deccd0e15dc4047ab96eba344144f3b]: Posting change notifications: seq (123627)
Database: CBLDatabase[<0x6180001258c0>db-1deccd0e15dc4047ab96eba344144f3b]: Posting change notifications: seq (123627)
On Apr 14, 2016, at 4:50 PM, Brendan Duddridge <bren...@gmail.com> wrote:
Database: PUT _id=rec-a0ada90ce645458ebdb3ff7259c6fb1b, _rev=1-4098dccaa969cdbab64825e687aaec68, _deleted=1, allowConflict=1
Database: Duplicate rev insertion: rec-a0ada90ce645458ebdb3ff7259c6fb1b / 2-a106816d32bc283bc24acf98abeeec2d