Mailing List Archive

[MediaWiki-commits] [Gerrit] VisualEditor/VisualEditor[master]: ve.dm.Change: Truncate stores as well as transactions on con...
Divec has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/405926 )

Change subject: ve.dm.Change: Truncate stores as well as transactions on conflict
......................................................................

ve.dm.Change: Truncate stores as well as transactions on conflict

Change-Id: I5e07579ded9715384875a2d83498d54a9eb0f808
---
M src/dm/ve.dm.Change.js
M tests/dm/ve.dm.Change.test.js
2 files changed, 43 insertions(+), 6 deletions(-)


git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor refs/changes/26/405926/1

diff --git a/src/dm/ve.dm.Change.js b/src/dm/ve.dm.Change.js
index 5ff3bdf..a582371 100644
--- a/src/dm/ve.dm.Change.js
+++ b/src/dm/ve.dm.Change.js
@@ -432,6 +432,7 @@
if ( rebases[ 0 ] === null ) {
rejected = uncommitted.mostRecent( uncommitted.start + i );
transactionsB.length = i;
+ storesB.length = i;
selectionsB = {};
break bLoop;
}
@@ -658,16 +659,13 @@
*/
ve.dm.Change.prototype.unapplyTo = function ( surface ) {
var doc = surface.documentModel,
- historyLength = doc.completeHistory.length - this.getLength(),
- storeLength = doc.store.getLength();
- this.stores.forEach( function ( store ) {
- storeLength -= store.getLength();
- } );
+ historyLength = doc.completeHistory.length - this.getLength();
this.transactions.slice().reverse().forEach( function ( tx ) {
surface.change( tx.reversed() );
} );
doc.completeHistory.length = historyLength;
- doc.store.truncate( storeLength );
+ doc.storeLengthAtHistoryLength.length = historyLength + 1;
+ doc.store.truncate( doc.storeLengthAtHistoryLength[ historyLength ] );
};

/**
diff --git a/tests/dm/ve.dm.Change.test.js b/tests/dm/ve.dm.Change.test.js
index dc9aea1..76f5855 100644
--- a/tests/dm/ve.dm.Change.test.js
+++ b/tests/dm/ve.dm.Change.test.js
@@ -276,6 +276,45 @@
);
} );

+QUnit.test( 'Rebase with conflicting annotations', function ( assert ) {
+ var setBold, remove, result,
+ origData = [ { type: 'paragraph' }, 'A', { type: '/paragraph' } ],
+ newSurface = function () {
+ return new ve.dm.Surface(
+ ve.dm.example.createExampleDocumentFromData( origData )
+ );
+ },
+ surface = newSurface(),
+ doc = surface.documentModel,
+ TxRemove = ve.dm.TransactionBuilder.static.newFromRemoval,
+ TxAnnotate = ve.dm.TransactionBuilder.static.newFromAnnotation,
+ b = ve.dm.example.bold,
+ emptyStore = new ve.dm.IndexValueStore(),
+ bStore = new ve.dm.IndexValueStore( [ b ] );
+
+ assert.expect( 3 );
+
+ // Canonical history: text was removed
+ remove = new ve.dm.Change( 1, [ TxRemove( doc, new ve.Range( 1, 2 ) ) ], [ emptyStore ], {} );
+ setBold = new ve.dm.Change( 1, [. TxAnnotate( doc, new ve.Range( 1, 2 ), 'set', b ) ], [ bStore ], {} );
+ result = ve.dm.Change.static.rebaseUncommittedChange( remove, setBold );
+ assert.deepEqual(
+ result.rebased.serialize(),
+ new ve.dm.Change( 2, [], [], {} ).serialize(),
+ 'Nothing got rebased'
+ );
+ assert.deepEqual(
+ result.rejected.serialize(),
+ setBold.serialize(),
+ 'setBold got rejected'
+ );
+ assert.deepEqual(
+ result.transposedHistory.serialize(),
+ remove.serialize(),
+ 'remove got transposed'
+ );
+} );
+
QUnit.test( 'Serialize/deserialize', function ( assert ) {
var origData = [. { type: 'paragraph' }, 'b', 'a', 'r', { type: '/paragraph' } ],
newSurface = function () {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5e07579ded9715384875a2d83498d54a9eb0f808
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Divec <david@troi.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
[MediaWiki-commits] [Gerrit] VisualEditor/VisualEditor[master]: ve.dm.Change: Truncate stores as well as transactions on con... [ In reply to ]
jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/405926 )

Change subject: ve.dm.Change: Truncate stores as well as transactions on conflict
......................................................................


ve.dm.Change: Truncate stores as well as transactions on conflict

Change-Id: I5e07579ded9715384875a2d83498d54a9eb0f808
---
M src/dm/ve.dm.Change.js
M tests/dm/ve.dm.Change.test.js
2 files changed, 44 insertions(+), 6 deletions(-)

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



diff --git a/src/dm/ve.dm.Change.js b/src/dm/ve.dm.Change.js
index 5ff3bdf..a582371 100644
--- a/src/dm/ve.dm.Change.js
+++ b/src/dm/ve.dm.Change.js
@@ -432,6 +432,7 @@
if ( rebases[ 0 ] === null ) {
rejected = uncommitted.mostRecent( uncommitted.start + i );
transactionsB.length = i;
+ storesB.length = i;
selectionsB = {};
break bLoop;
}
@@ -658,16 +659,13 @@
*/
ve.dm.Change.prototype.unapplyTo = function ( surface ) {
var doc = surface.documentModel,
- historyLength = doc.completeHistory.length - this.getLength(),
- storeLength = doc.store.getLength();
- this.stores.forEach( function ( store ) {
- storeLength -= store.getLength();
- } );
+ historyLength = doc.completeHistory.length - this.getLength();
this.transactions.slice().reverse().forEach( function ( tx ) {
surface.change( tx.reversed() );
} );
doc.completeHistory.length = historyLength;
- doc.store.truncate( storeLength );
+ doc.storeLengthAtHistoryLength.length = historyLength + 1;
+ doc.store.truncate( doc.storeLengthAtHistoryLength[ historyLength ] );
};

/**
diff --git a/tests/dm/ve.dm.Change.test.js b/tests/dm/ve.dm.Change.test.js
index dc9aea1..f82c31f 100644
--- a/tests/dm/ve.dm.Change.test.js
+++ b/tests/dm/ve.dm.Change.test.js
@@ -276,6 +276,46 @@
);
} );

+QUnit.test( 'Rebase with conflicting annotations', function ( assert ) {
+ var setBold, remove, result,
+ origData = [ { type: 'paragraph' }, 'A', { type: '/paragraph' } ],
+ newSurface = function () {
+ return new ve.dm.Surface(
+ ve.dm.example.createExampleDocumentFromData( origData )
+ );
+ },
+ surface = newSurface(),
+ doc = surface.documentModel,
+ TxRemove = ve.dm.TransactionBuilder.static.newFromRemoval,
+ TxAnnotate = ve.dm.TransactionBuilder.static.newFromAnnotation,
+ b = ve.dm.example.bold,
+ emptyStore = new ve.dm.IndexValueStore(),
+ bStore = new ve.dm.IndexValueStore( [ b ] );
+
+ assert.expect( 3 );
+
+ // Canonical history: text gets removed
+ remove = new ve.dm.Change( 1, [ TxRemove( doc, new ve.Range( 1, 2 ) ) ], [ emptyStore ], {} );
+ // Doomed conflicting history: text gets bolded
+ setBold = new ve.dm.Change( 1, [. TxAnnotate( doc, new ve.Range( 1, 2 ), 'set', b ) ], [ bStore ], {} );
+ result = ve.dm.Change.static.rebaseUncommittedChange( remove, setBold );
+ assert.deepEqual(
+ result.rebased.serialize(),
+ new ve.dm.Change( 2, [], [], {} ).serialize(),
+ 'Nothing got rebased'
+ );
+ assert.deepEqual(
+ result.rejected.serialize(),
+ setBold.serialize(),
+ 'setBold got rejected'
+ );
+ assert.deepEqual(
+ result.transposedHistory.serialize(),
+ remove.serialize(),
+ 'remove got transposed'
+ );
+} );
+
QUnit.test( 'Serialize/deserialize', function ( assert ) {
var origData = [. { type: 'paragraph' }, 'b', 'a', 'r', { type: '/paragraph' } ],
newSurface = function () {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I5e07579ded9715384875a2d83498d54a9eb0f808
Gerrit-PatchSet: 2
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Divec <david@troi.org>
Gerrit-Reviewer: Catrope <roan@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits