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