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