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