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

Function updateDoc

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

Source from the content-addressed store, hash-verified

4651}
4652
4653function updateDoc(revLimit, prev, docInfo, results,
4654 i, cb, writeDoc, newEdits) {
4655
4656 if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
4657 results[i] = docInfo;
4658 return cb();
4659 }
4660
4661 // sometimes this is pre-calculated. historically not always
4662 var previousWinningRev = prev.winningRev || winningRev(prev);
4663 var previouslyDeleted = 'deleted' in prev ? prev.deleted :
4664 isDeleted(prev, previousWinningRev);
4665 var deleted = 'deleted' in docInfo.metadata ? docInfo.metadata.deleted :
4666 isDeleted(docInfo.metadata);
4667 var isRoot = /^1-/.test(docInfo.metadata.rev);
4668
4669 if (previouslyDeleted && !deleted && newEdits && isRoot) {
4670 var newDoc = docInfo.data;
4671 newDoc._rev = previousWinningRev;
4672 newDoc._id = docInfo.metadata.id;
4673 docInfo = parseDoc(newDoc, newEdits);
4674 }
4675
4676 var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
4677
4678 var inConflict = newEdits && ((
4679 (previouslyDeleted && deleted && merged.conflicts !== 'new_leaf') ||
4680 (!previouslyDeleted && merged.conflicts !== 'new_leaf') ||
4681 (previouslyDeleted && !deleted && merged.conflicts === 'new_branch')));
4682
4683 if (inConflict) {
4684 var err = createError(REV_CONFLICT);
4685 results[i] = err;
4686 return cb();
4687 }
4688
4689 var newRev = docInfo.metadata.rev;
4690 docInfo.metadata.rev_tree = merged.tree;
4691 docInfo.stemmedRevs = merged.stemmedRevs || [];
4692 /* istanbul ignore else */
4693 if (prev.rev_map) {
4694 docInfo.metadata.rev_map = prev.rev_map; // used only by leveldb
4695 }
4696
4697 // recalculate
4698 var winningRev$$1 = winningRev(docInfo.metadata);
4699 var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);
4700
4701 // calculate the total number of documents that were added/removed,
4702 // from the perspective of total_rows/doc_count
4703 var delta = (previouslyDeleted === winningRevIsDeleted) ? 0 :
4704 previouslyDeleted < winningRevIsDeleted ? -1 : 1;
4705
4706 var newRevIsDeleted;
4707 if (newRev === winningRev$$1) {
4708 // if the new rev is the same as the winning rev, we can reuse that value
4709 newRevIsDeleted = winningRevIsDeleted;
4710 } 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…