Author: ericwa
Date: Sun Mar 16 08:26:06 2014
New Revision: 10579
URL: http://svn.gna.org/viewcvs/etoile?rev=10579&view=rev
Log:
COUndoTrack: restore commit metadata added to synthesized commits made during
undo/redo. This was broken during the last COUndoTrack rewrite. Add tests for
the metadata.
Modified:
trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.h
trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeleteBranch.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeletePersistentRoot.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.h
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetBranchMetadata.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentBranch.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentVersionForBranch.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetPersistentRootMetadata.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeleteBranch.m
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeletePersistentRoot.m
trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m
Modified: trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m (original)
+++ trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m Sun Mar 16
08:26:06 2014
@@ -125,26 +125,57 @@
UKObjectsEqual(@"root", [root valueForProperty: kCOLabel]);
UKObjectsEqual(@"child", [child valueForProperty: kCOLabel]);
- // Selective undo
+ CORevision *r3 = ctx2persistentRoot.currentRevision;
+
+ //
+ // First Selective undo
+ //
[rootEditTrack undo];
UKNil([root valueForProperty: kCOLabel]);
UKObjectsEqual(@"child", [child valueForProperty: kCOLabel]);
- // Selective undo
+ // Check that a new revision was created
+ CORevision *r4 = ctx2persistentRoot.currentRevision;
+ UKObjectsNotEqual(r3, r4);
+ UKObjectsEqual(r3, [r4 parentRevision]);
+ UKObjectsEqual(@"org.etoile.CoreObject.undo", [[r4
commitDescriptor] identifier]);
+
+ //
+ // Second Selective undo
+ //
[childEditTrack undo];
+ // Check that a new revision was created
+ CORevision *r5 = ctx2persistentRoot.currentRevision;
+ UKObjectsEqual(r4, [r5 parentRevision]);
+ UKObjectsEqual(@"org.etoile.CoreObject.undo", [[r5
commitDescriptor] identifier]);
+
UKNil([root valueForProperty: kCOLabel]);
UKNil([child valueForProperty: kCOLabel]);
- // Selective Redo
+ //
+ // First selective redo
+ //
[rootEditTrack redo];
+ // Check that a new revision was created
+ CORevision *r6 = ctx2persistentRoot.currentRevision;
+ UKObjectsEqual(r5, [r6 parentRevision]);
+ UKObjectsEqual(@"org.etoile.CoreObject.redo", [[r6
commitDescriptor] identifier]);
+
UKObjectsEqual(@"root", [root valueForProperty: kCOLabel]);
UKNil([child valueForProperty: kCOLabel]);
- // Selective Redo
+ //
+ // Second selective redo
+ //
[childEditTrack redo];
+
+ // Check that a new revision was created
+ CORevision *r7 = ctx2persistentRoot.currentRevision;
+ UKObjectsEqual(r6, [r7 parentRevision]);
+ UKObjectsEqual(@"org.etoile.CoreObject.redo", [[r7
commitDescriptor] identifier]);
UKObjectsEqual(@"root", [root valueForProperty: kCOLabel]);
UKObjectsEqual(@"child", [child valueForProperty: kCOLabel]);
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.h
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.h?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.h (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.h Sun Mar 16 08:26:06 2014
@@ -100,6 +100,7 @@
* Applies the receiver changes directly to a store transaction.
*/
- (void) addToStoreTransaction: (COStoreTransaction *)txn
+ isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx;
/** @taskunit Framework Private */
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.m (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommand.m Sun Mar 16 08:26:06 2014
@@ -123,7 +123,7 @@
[NSException raise: NSInvalidArgumentException format: @"override"];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[NSException raise: NSInvalidArgumentException format: @"override"];
}
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeleteBranch.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeleteBranch.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeleteBranch.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeleteBranch.m Sun Mar
16 08:26:06 2014
@@ -60,7 +60,7 @@
[branch setDeleted: YES];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn deleteBranch: _branchUUID ofPersistentRoot: _persistentRootUUID];
}
Modified:
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeletePersistentRoot.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeletePersistentRoot.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeletePersistentRoot.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandDeletePersistentRoot.m
Sun Mar 16 08:26:06 2014
@@ -83,7 +83,7 @@
[[aContext persistentRootForUUID: _persistentRootUUID] setDeleted: YES];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn deletePersistentRoot: _persistentRootUUID];
}
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.h
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.h?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.h (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.h Sun Mar 16
08:26:06 2014
@@ -126,6 +126,7 @@
* Applies the receiver changes directly to a store transaction.
*/
- (void) addToStoreTransaction: (COStoreTransaction *)txn
+ isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx;
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.m (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandGroup.m Sun Mar 16
08:26:06 2014
@@ -27,7 +27,6 @@
@synthesize timestamp = _timestamp;
@synthesize sequenceNumber = _sequenceNumber;
@synthesize parentUUID = _parentUUID;
-@synthesize parentUndoTrack = _parentUndoTrack;
@synthesize trackName = _trackName;
#pragma mark -
@@ -156,20 +155,34 @@
}
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
NILARG_EXCEPTION_TEST(ctx);
NILARG_EXCEPTION_TEST(txn);
for (COCommand *command in _contents)
{
- [command addToStoreTransaction: txn assumingEditingContextState: ctx];
+ [command addToStoreTransaction: txn isUndo: isUndo
assumingEditingContextState: ctx];
}
}
- (NSString *)kind
{
return _(@"Change Group");
+}
+
+- (COUndoTrack *)parentUndoTrack
+{
+ return _parentUndoTrack;
+}
+
+- (void)setParentUndoTrack:(COUndoTrack *)parentUndoTrack
+{
+ _parentUndoTrack = parentUndoTrack;
+ for (COCommand *childCommand in self.contents)
+ {
+ childCommand.parentUndoTrack = parentUndoTrack;
+ }
}
#pragma mark -
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetBranchMetadata.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetBranchMetadata.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetBranchMetadata.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetBranchMetadata.m
Sun Mar 16 08:26:06 2014
@@ -75,7 +75,7 @@
[branch setMetadata: _newMetadata];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn setMetadata: _newMetadata forBranch: _branchUUID ofPersistentRoot:
_persistentRootUUID];
}
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentBranch.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentBranch.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentBranch.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentBranch.m Sun Mar
16 08:26:06 2014
@@ -66,7 +66,7 @@
[proot setCurrentBranch: branch];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn setCurrentBranch: _newBranchUUID forPersistentRoot:
_persistentRootUUID];
}
Modified:
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentVersionForBranch.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentVersionForBranch.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
---
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentVersionForBranch.m
(original)
+++
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetCurrentVersionForBranch.m
Sun Mar 16 08:26:06 2014
@@ -198,7 +198,7 @@
return valueFromEditingContext;
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)aContext
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)aContext
{
NILARG_EXCEPTION_TEST(aContext);
@@ -240,9 +240,16 @@
// TODO: Filter out unmodified items
+ NSMutableDictionary *md = [NSMutableDictionary new];
+ md[kCOCommitMetadataIdentifier] = isUndo ?
@"org.etoile.CoreObject.undo" : @"org.etoile.CoreObject.redo";
+ if ([self localizedShortDescription] != nil)
+ {
+ md[kCOCommitMetadataShortDescriptionArguments] =
@[[self localizedShortDescription]];
+ }
+
[txn writeRevisionWithModifiedItems: result
revisionUUID:
newRevisionUUID
- metadata:
nil // FIXME: Copy from commented out part of COUndoTrack
+ metadata: md
parentRevisionID:
branchCurrentRevisionUUID
mergeParentRevisionID: nil
persistentRootUUID:
_persistentRootUUID
Modified:
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetPersistentRootMetadata.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetPersistentRootMetadata.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
---
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetPersistentRootMetadata.m
(original)
+++
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandSetPersistentRootMetadata.m
Sun Mar 16 08:26:06 2014
@@ -69,7 +69,7 @@
[proot setMetadata: _newMetadata];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn setMetadata: _newMetadata forPersistentRoot: _persistentRootUUID];
}
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeleteBranch.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeleteBranch.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeleteBranch.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeleteBranch.m Sun Mar
16 08:26:06 2014
@@ -60,7 +60,7 @@
[branch setDeleted: NO];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn undeleteBranch: _branchUUID ofPersistentRoot: _persistentRootUUID];
}
Modified:
trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeletePersistentRoot.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeletePersistentRoot.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeletePersistentRoot.m
(original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COCommandUndeletePersistentRoot.m
Sun Mar 16 08:26:06 2014
@@ -43,7 +43,7 @@
[[aContext persistentRootForUUID: _persistentRootUUID] setDeleted: NO];
}
-- (void) addToStoreTransaction: (COStoreTransaction *)txn
assumingEditingContextState: (COEditingContext *)ctx
+- (void) addToStoreTransaction: (COStoreTransaction *)txn isUndo: (BOOL)isUndo
assumingEditingContextState: (COEditingContext *)ctx
{
[txn undeletePersistentRoot: _persistentRootUUID];
}
Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m?rev=10579&r1=10578&r2=10579&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m Sun Mar 16
08:26:06 2014
@@ -502,24 +502,8 @@
- (void) doCommand: (COCommandGroup *)aCommand inverse: (BOOL)inverse
addToStoreTransaction: (COStoreTransaction *)txn
{
COCommandGroup *commandToApply = (inverse ? [aCommand inverse] :
aCommand);
-// [commandToApply applyToContext: _editingContext];
- [commandToApply addToStoreTransaction: txn assumingEditingContextState:
_editingContext];
-
-
-
- // N.B. This must not automatically push a revision
-// _editingContext.isRecordingUndo = NO;
- // TODO: If we can detect a non-selective undo and -commit returns a
command,
- // we could implement -validateUndoCommitWithCommand: to ensure there
is no
- // command COCommandCreatePersistentRoot or
COCommandNewRevisionForBranch
- // that create new revisions in the store.
-// [_editingContext commitWithIdentifier: inverse ?
@"org.etoile.CoreObject.undo" : @"org.etoile.CoreObject.redo"
-// metadata: [commandToApply
localizedShortDescription] != nil
-//
? @{ kCOCommitMetadataShortDescriptionArguments : @[[commandToApply
localizedShortDescription]] }
-//
: @{}
-// undoTrack: nil
-// error: NULL];
-// _editingContext.isRecordingUndo = YES;
+ [commandToApply setParentUndoTrack: self];
+ [commandToApply addToStoreTransaction: txn isUndo: inverse
assumingEditingContextState: _editingContext];
// Update the current command for this track.
@@ -562,10 +546,6 @@
}
aCommand.parentUndoTrack = self;
- for (COCommand *childCommand in aCommand.contents)
- {
- childCommand.parentUndoTrack = self;
- }
_commandsByUUID[aCommand.UUID] = aCommand;
}
_______________________________________________
Etoile-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-cvs