Author: ericwa
Date: Mon Mar 24 21:05:31 2014
New Revision: 10629

URL: http://svn.gna.org/viewcvs/etoile?rev=10629&view=rev
Log:
COUndoTrack: add a customRevisionMetadata property for providing extra metadata 
for the track to attach to commits (e.g. ProjectDemo username metadata)

Modified:
    trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m
    trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.h
    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=10629&r1=10628&r2=10629&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m    (original)
+++ trunk/Etoile/Frameworks/CoreObject/Tests/Undo/TestUndo.m    Mon Mar 24 
21:05:31 2014
@@ -126,10 +126,13 @@
         UKObjectsEqual(@"child", [child valueForProperty: kCOLabel]);
         
                CORevision *r3 = ctx2persistentRoot.currentRevision;
+
+               rootEditTrack.customRevisionMetadata = @{ @"extraKey" : 
@"extraValue" };
                
                //
         // First Selective undo
                //
+
         [rootEditTrack undo];
         
         UKNil([root valueForProperty: kCOLabel]);
@@ -140,6 +143,7 @@
                UKObjectsNotEqual(r3, r4);
                UKObjectsEqual(r3, [r4 parentRevision]);
                UKObjectsEqual(@"org.etoile.CoreObject.undo", [[r4 
commitDescriptor] identifier]);
+               UKObjectsEqual(@"extraValue", r4.metadata[@"extraKey"]);
                
                //
         // Second Selective undo
@@ -633,6 +637,8 @@
        [self checkCommand: _testTrack.nodes[1] isSetVersionFrom: r0 to: r1];
        [self checkCommand: _testTrack.nodes[2] isSetVersionFrom: r1 to: r2];
        
+       _testTrack.customRevisionMetadata = @{ @"extraKey" : @"extraValue" };
+       
        // selective undo child1 insertion
        [_testTrack undoNode: _testTrack.nodes[1]];
        CORevision *r3 = [doc1 currentRevision];
@@ -648,7 +654,9 @@
        [self checkCommand: _testTrack.nodes[3] isSetVersionFrom: r1 to: r0];
        
        // Check that the commit created by COUndoTrack has proper commit 
metadata
+       // FIXME: This next line tests the undo track node metadata, not the 
revision metadata.
        UKObjectsEqual(@"org.etoile.CoreObject.selective-undo", 
[[_testTrack.nodes[3] commitDescriptor] identifier]);
+       UKObjectsEqual(@"extraValue", 
doc1.currentRevision.metadata[@"extraKey"]);
        
        // Efficiency test: the r3 commit should only have written one item to 
the store
        // (root) since that was the only change.

Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.h
URL: 
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.h?rev=10629&r1=10628&r2=10629&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.h       (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.h       Mon Mar 24 
21:05:31 2014
@@ -116,7 +116,15 @@
  * called.
  */
 @property (nonatomic, readonly) COEditingContext *editingContext;
-
+/**
+ * If set, COUndoTrack will add these keys/values to the revision
+ * metadata when it commits a revision in response to -undo/-redo, 
+ * or -undoNode:/-redoNode:.
+ *
+ * For example, use this if you want to record the user's name
+ * in revisions they commit using the undo track.
+ */
+@property (nonatomic, readwrite) NSDictionary *customRevisionMetadata;
 
 /** @taskunit Clearing and Coalescing Commands */
 

Modified: trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m
URL: 
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m?rev=10629&r1=10628&r2=10629&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m       (original)
+++ trunk/Etoile/Frameworks/CoreObject/Undo/COUndoTrack.m       Mon Mar 24 
21:05:31 2014
@@ -34,6 +34,7 @@
 @implementation COUndoTrack
 
 @synthesize name = _name, editingContext = _editingContext, store = _store;
+@synthesize customRevisionMetadata;
 
 #pragma mark -
 #pragma mark Initialization
@@ -281,9 +282,14 @@
        if (commitShortDescription == nil)
                commitShortDescription = @"";
        
-       NSDictionary *md = @{kCOCommitMetadataIdentifier : 
@"org.etoile.CoreObject.selective-undo",
-                                                
kCOCommitMetadataShortDescriptionArguments : @[commitShortDescription]};
+       NSMutableDictionary *md = [@{kCOCommitMetadataIdentifier : 
@"org.etoile.CoreObject.selective-undo",
+                                                                
kCOCommitMetadataShortDescriptionArguments : @[commitShortDescription]} 
mutableCopy];
                
+       if (self.customRevisionMetadata != nil)
+       {
+               [md addEntriesFromDictionary: self.customRevisionMetadata];
+       }
+       
        command.metadata = md;
        
        COStoreTransaction *txn = [[COStoreTransaction alloc] init];
@@ -304,8 +310,13 @@
        if (commitShortDescription == nil)
                commitShortDescription = @"";
        
-       NSDictionary *md = @{kCOCommitMetadataIdentifier : 
@"org.etoile.CoreObject.selective-redo",
-                                                
kCOCommitMetadataShortDescriptionArguments : @[commitShortDescription]};
+       NSMutableDictionary *md = [@{kCOCommitMetadataIdentifier : 
@"org.etoile.CoreObject.selective-redo",
+                                                                
kCOCommitMetadataShortDescriptionArguments : @[commitShortDescription]} 
mutableCopy];
+       
+       if (self.customRevisionMetadata != nil)
+       {
+               [md addEntriesFromDictionary: self.customRevisionMetadata];
+       }
 
        command.metadata = md;
        
@@ -528,6 +539,10 @@
        if ([aCommand localizedShortDescription] != nil)
        {
                md[kCOCommitMetadataShortDescriptionArguments] = @[[aCommand 
localizedShortDescription]];
+       }
+       if (self.customRevisionMetadata != nil)
+       {
+               [md addEntriesFromDictionary: self.customRevisionMetadata];
        }
        
        [commandToApply addToStoreTransaction: txn withRevisionMetadata: md 
assumingEditingContextState: _editingContext];


_______________________________________________
Etoile-cvs mailing list
Etoile-cvs@gna.org
https://mail.gna.org/listinfo/etoile-cvs

Reply via email to