jenkins-bot has submitted this change and it was merged.

Change subject: Bug 50636: Don't extrapolate DSR on change
......................................................................


Bug 50636: Don't extrapolate DSR on change

The WikitextSerializer's emitSeparator method was using text node lengths to
extrapolate a previousSibling's DSR, even if that text node was changed. This
led to an invalid extrapolated dsr if that text was modified.

This patch adds a test for the (new) children-modified diff marker on the
parentNode and does not extrapolate the DSR in that case.

Fixes four selser tests in the process.

Change-Id: Iad67bac7a9ba890cbd3816d3ff3295b23b34be30
---
M js/lib/mediawiki.DOMDiff.js
M js/lib/mediawiki.DOMUtils.js
M js/lib/mediawiki.WikitextSerializer.js
M js/tests/parserTests-blacklist.js
4 files changed, 12 insertions(+), 5 deletions(-)

Approvals:
  GWicke: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/js/lib/mediawiki.DOMDiff.js b/js/lib/mediawiki.DOMDiff.js
index 94234e3..5d4814e 100644
--- a/js/lib/mediawiki.DOMDiff.js
+++ b/js/lib/mediawiki.DOMDiff.js
@@ -172,6 +172,7 @@
 
        while ( baseNode && newNode ) {
                debugOut(baseNode, newNode);
+               // shallow check first
                if ( ! this.treeEquals(baseNode, newNode, false) ) {
                        this.debug("-- not equal --");
                        var origNode = newNode,
@@ -239,6 +240,9 @@
                                }
                        }
 
+                       // Record the fact that direct children changed in the 
parent node
+                       this.markNode(newParentNode, 'modified-children');
+
                        foundDiffOverall = true;
                } else if (!DU.isTplElementNode(this.env, newNode)) {
                        // Recursively diff subtrees if not template-like 
content
diff --git a/js/lib/mediawiki.DOMUtils.js b/js/lib/mediawiki.DOMUtils.js
index 21a5b27..36ca2e1 100644
--- a/js/lib/mediawiki.DOMUtils.js
+++ b/js/lib/mediawiki.DOMUtils.js
@@ -506,6 +506,11 @@
                return dmark && dmark.diff.length === 1 && dmark.diff[0] === 
'subtree-changed';
        },
 
+       directChildrenChanged: function(node, env) {
+               var dmark = this.currentDiffMark(node, env);
+               return dmark && dmark.diff.indexOf('children-changed') !== -1;
+       },
+
        hasInsertedOrModifiedDiffMark: function(node, env) {
                var diffMark = this.currentDiffMark(node, env);
                return diffMark &&
diff --git a/js/lib/mediawiki.WikitextSerializer.js 
b/js/lib/mediawiki.WikitextSerializer.js
index d352e5b..ed37b3a 100644
--- a/js/lib/mediawiki.WikitextSerializer.js
+++ b/js/lib/mediawiki.WikitextSerializer.js
@@ -3465,7 +3465,9 @@
                                dsrA = prevNode.parentNode.data.parsoid.dsr;
                        } else if (prevNode.previousSibling &&
                                        prevNode.previousSibling.nodeType === 
prevNode.ELEMENT_NODE &&
-                                       
prevNode.previousSibling.data.parsoid.dsr)
+                                       
prevNode.previousSibling.data.parsoid.dsr &&
+                                       // Don't extrapolate if the string was 
potentially changed
+                                       
!DU.directChildrenChanged(node.parentNode, this.env))
                        {
                                var endDsr = 
prevNode.previousSibling.data.parsoid.dsr[1],
                                        correction;
diff --git a/js/tests/parserTests-blacklist.js 
b/js/tests/parserTests-blacklist.js
index 83df63e..0a531a1 100644
--- a/js/tests/parserTests-blacklist.js
+++ b/js/tests/parserTests-blacklist.js
@@ -2714,12 +2714,10 @@
 add("selser", "Table rowspan [2]");
 add("selser", "Table rowspan [1]");
 add("selser", "Table rowspan [[0,[1,0,2,0]]]");
-add("selser", "Table rowspan [[3,4]]");
 add("selser", "Table rowspan [[2,2]]");
 add("selser", "Table rowspan [[0,[1,0,2,2]]]");
 add("selser", "Table rowspan [[3,[1,0,[0,2,0,4],2]]]");
 add("selser", "Table rowspan [[0,[[4,0,4,0,1],0,1,2]]]");
-add("selser", "Table rowspan [[0,4]]");
 add("selser", "Table rowspan [[4,1]]");
 add("selser", "Table rowspan [[0,[2,0,4,0]]]");
 add("selser", "Table rowspan [[2,1]]");
@@ -2735,7 +2733,6 @@
 add("selser", "Nested table [[3,[3,0]]]");
 add("selser", "Nested table [[0,[[[4,[4]],2,1,3,[3]],2]]]");
 add("selser", "Nested table [[3,[1,4]]]");
-add("selser", "Nested table [[0,4]]");
 add("selser", "Nested table [[0,[[1,2,[3,4],0,4],2]]]");
 add("selser", "Nested table [[0,[1,2]]]");
 add("selser", "Nested table [[0,1]]");
@@ -3492,7 +3489,6 @@
 add("selser", "Ignore pipe between table row attributes [[4,2]]");
 add("selser", "Ignore pipe between table row attributes [[2,[0,0,2,2]]]");
 add("selser", "Ignore pipe between table row attributes 
[[2,[0,3,[0,[3]],2]]]");
-add("selser", "Ignore pipe between table row attributes [[3,[0,2,[0,1],3]]]");
 add("selser", "Ignore pipe between table row attributes [[3,2]]");
 add("selser", "Ignore pipe between table row attributes [[2,1]]");
 add("selser", "Ref: 3. spaces in ref-names should be ignored [[0,0,2,0,3,0]]");

-- 
To view, visit https://gerrit.wikimedia.org/r/71757
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iad67bac7a9ba890cbd3816d3ff3295b23b34be30
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: GWicke <[email protected]>
Gerrit-Reviewer: GWicke <[email protected]>
Gerrit-Reviewer: Subramanya Sastry <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to