MCPcopy
hub / github.com/apache/pouchdb / updateDoc

Function updateDoc

lib/index-browser.js:4508–4572  ·  view source on GitHub ↗
(revLimit, prev, docInfo, results,
                   i, cb, writeDoc, newEdits)

Source from the content-addressed store, hash-verified

4506}
4507
4508function updateDoc(revLimit, prev, docInfo, results,
4509 i, cb, writeDoc, newEdits) {
4510
4511 if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
4512 results[i] = docInfo;
4513 return cb();
4514 }
4515
4516 // sometimes this is pre-calculated. historically not always
4517 var previousWinningRev = prev.winningRev || winningRev(prev);
4518 var previouslyDeleted = 'deleted' in prev ? prev.deleted :
4519 isDeleted(prev, previousWinningRev);
4520 var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :
4521 isDeleted(docInfo.metadata);
4522 var isRoot = /^1-/.test(docInfo.metadata.rev);
4523
4524 if (previouslyDeleted && !deleted && newEdits && isRoot) {
4525 var newDoc = docInfo.data;
4526 newDoc._rev = previousWinningRev;
4527 newDoc._id = docInfo.metadata.id;
4528 docInfo = parseDoc(newDoc, newEdits);
4529 }
4530
4531 var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
4532
4533 var inConflict = newEdits && ((
4534 (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||
4535 (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||
4536 (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));
4537
4538 if (inConflict) {
4539 var err = createError(REV_CONFLICT);
4540 results[i] = err;
4541 return cb();
4542 }
4543
4544 var newRev = docInfo.metadata.rev;
4545 docInfo.metadata.rev_tree = merged.tree;
4546 docInfo.stemmedRevs = merged.stemmedRevs || [];
4547 /* istanbul ignore else */
4548 if (prev.rev_map) {
4549 docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb
4550 }
4551
4552 // recalculate
4553 var winningRev$$1 = winningRev(docInfo.metadata);
4554 var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);
4555
4556 // calculate the total number of documents that were added/removed,
4557 // from the perspective of total_rows/doc_count
4558 var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :
4559 previouslyDeleted < winningRevIsDeleted ? -1 : 1;
4560
4561 var newRevIsDeleted;
4562 if (newRev === winningRev$$1) {
4563 // if the new rev is the same as the winning rev, we can reuse that value
4564 newRevIsDeleted = winningRevIsDeleted;
4565 } else {

Callers 1

nextDocFunction · 0.70

Calls 7

revExistsFunction · 0.70
winningRevFunction · 0.70
isDeletedFunction · 0.70
parseDocFunction · 0.70
mergeFunction · 0.70
createErrorFunction · 0.70
writeDocFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…