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
Etoile-cvs@gna.org
https://mail.gna.org/listinfo/etoile-cvs

Reply via email to