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
[email protected]
https://mail.gna.org/listinfo/etoile-cvs