hpi-swa / Squot

Squeak Object Tracker - Version control for arbitrary objects, currently with Git storage
Other
61 stars 29 forks source link

MessageNotUnderstood: SquotDiffOfEqualObjects>>object #365

Closed LinqLover closed 2 years ago

LinqLover commented 2 years ago

I encountered this bug while trying to work around #364: Before switching back from branch b to branch a, I added the package P to the tracking list but did not check in this change. In the merge dialog after pressing "switch to this branch (a), but keep uncommited changes, I chose the already loaded edition for both P and the load order. The single container conflict (a SquotObjectAdditionConflict) resolution is a SquotDiffOfEqualObjects which does not understand object.

If you cannot reproduce this, I have created a snapshot of my image which I can share with you on request. :)

Bug Report
9 January 2022 5:41:25.31579 pm

VM: Win32 - Smalltalk
Image: Squeak6.0alpha [latest update: #20921]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir C:\Users\Christoph\OneDrive\Dokumente\Squeak\squot-failures
Trusted Dir C:\Users\Christoph\Documents\squeak\TraceDebugger\Christoph
Untrusted Dir C:\Users\Christoph\OneDrive\Dokumente\My Squeak

SquotDiffOfEqualObjects(Object)>>doesNotUnderstand: #object
    Receiver: a SquotDiffOfEqualObjects
    Arguments and temporary variables: 
        aMessage:   object
        exception:  MessageNotUnderstood: SquotDiffOfEqualObjects>>object
        resumeValue:    nil
    Receiver's instance variables: 
a SquotDiffOfEqualObjects

[] in SquotObjectGraphMerge>>privateResolvedPatch
    Receiver: a SquotObjectGraphMerge (1 conflicts, 0 changes, 0 merges)
    Arguments and temporary variables: 
        each:   a SquotObjectAdditionConflict
    Receiver's instance variables: 
        base:   a SquotShadowGraph
        working:    a SquotShadowGraph
        incoming:   a SquotShadowGraph
        containerConflicts:     a Dictionary(#()->a SquotObjectAdditionConflict )
        containerModifications:     a Dictionary()
        elementMerges:  a Dictionary()
        diffs:  a SquotObjectGraphDiff (0 changed objects)

[] in Dictionary>>valuesDo:
    Receiver: a Dictionary(#()->a SquotObjectAdditionConflict )
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotObjectGraphMerge>>privateResolvedPatch
        association:    #()->a SquotObjectAdditionConflict
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . nil . nil . #()->a SquotObjectAdditionConflict}

Dictionary>>associationsDo:
    Receiver: a Dictionary(#()->a SquotObjectAdditionConflict )
    Arguments and temporary variables: 
        aBlock:     [closure] in Dictionary>>valuesDo:
        element:    #()->a SquotObjectAdditionConflict
        index:  5
        indexLimiT:     5
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . nil . nil . #()->a SquotObjectAdditionConflict}

Dictionary>>valuesDo:
    Receiver: a Dictionary(#()->a SquotObjectAdditionConflict )
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotObjectGraphMerge>>privateResolvedPatch
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . nil . nil . #()->a SquotObjectAdditionConflict}

Dictionary>>do:
    Receiver: a Dictionary(#()->a SquotObjectAdditionConflict )
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotObjectGraphMerge>>privateResolvedPatch
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . nil . nil . #()->a SquotObjectAdditionConflict}

SquotObjectGraphMerge>>privateResolvedPatch
    Receiver: a SquotObjectGraphMerge (1 conflicts, 0 changes, 0 merges)
    Arguments and temporary variables: 

    Receiver's instance variables: 
        base:   a SquotShadowGraph
        working:    a SquotShadowGraph
        incoming:   a SquotShadowGraph
        containerConflicts:     a Dictionary(#()->a SquotObjectAdditionConflict )
        containerModifications:     a Dictionary()
        elementMerges:  a Dictionary()
        diffs:  a SquotObjectGraphDiff (0 changed objects)

SquotObjectGraphMerge(SquotAbstractMerge)>>resolvedPatch
    Receiver: a SquotObjectGraphMerge (1 conflicts, 0 changes, 0 merges)
    Arguments and temporary variables: 

    Receiver's instance variables: 
        base:   a SquotShadowGraph
        working:    a SquotShadowGraph
        incoming:   a SquotShadowGraph
        containerConflicts:     a Dictionary(#()->a SquotObjectAdditionConflict )
        containerModifications:     a Dictionary()
        elementMerges:  a Dictionary()
        diffs:  a SquotObjectGraphDiff (0 changed objects)

SquotArtifactMerge>>privateResolvedPatch
    Receiver: a SquotArtifactMerge
    Arguments and temporary variables: 
        modification:   nil
    Receiver's instance variables: 
        base:   a SquotArtifact('packages/TraceDebuggerBenchmarks.package')
        working:    'packages/TraceDebuggerBenchmarks.package' in a SquotImageStore
        incoming:   loaded 'packages/TraceDebuggerBenchmarks.package' in a SquotImageStore...etc...
        graphMerge:     a SquotObjectGraphMerge (1 conflicts, 0 changes, 0 merges)
        willBeLoaded:   true
        metadataMerge:  a SquotTrackedObjectMetadataMerge (0 conflicts, 0 changes, 0 mer...etc...

SquotArtifactMerge(SquotAbstractMerge)>>resolvedPatch
    Receiver: a SquotArtifactMerge
    Arguments and temporary variables: 

    Receiver's instance variables: 
        base:   a SquotArtifact('packages/TraceDebuggerBenchmarks.package')
        working:    'packages/TraceDebuggerBenchmarks.package' in a SquotImageStore
        incoming:   loaded 'packages/TraceDebuggerBenchmarks.package' in a SquotImageStore...etc...
        graphMerge:     a SquotObjectGraphMerge (1 conflicts, 0 changes, 0 merges)
        willBeLoaded:   true
        metadataMerge:  a SquotTrackedObjectMetadataMerge (0 conflicts, 0 changes, 0 mer...etc...

[] in SquotMerge>>privateResolvedPatch
    Receiver: a SquotMerge (0 conflicts, 0 changes, 1 merges)
    Arguments and temporary variables: 
        builder:    a SquotPatchBuilder
        each:   a SquotArtifactMerge
    Receiver's instance variables: 
        base:   commit afc45a3 "Update README.md with a current progress and basic usage ...etc...
        working:    TraceDebugger
        incoming:   a SquotSnapshot
        containerConflicts:     a Dictionary()
        containerModifications:     a Dictionary()
        elementMerges:  a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...
        loadOrderConflicts:     nil
        loadOrderMerge:     a SquotLoadOrderMerge (1 conflicts, 0 changes, 0 merges)
        customizedLoadOrder:    nil

[] in Dictionary>>valuesDo:
    Receiver: a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge )
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotMerge>>privateResolvedPatch
        association:    'packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . 'packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...

Dictionary>>associationsDo:
    Receiver: a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge )
    Arguments and temporary variables: 
        aBlock:     [closure] in Dictionary>>valuesDo:
        element:    'packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge
        index:  3
        indexLimiT:     5
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . 'packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...

Dictionary>>valuesDo:
    Receiver: a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge )
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotMerge>>privateResolvedPatch
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . 'packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...

Dictionary>>do:
    Receiver: a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge )
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotMerge>>privateResolvedPatch
    Receiver's instance variables: 
        tally:  1
        array:  {nil . nil . 'packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...

SquotMerge>>privateResolvedPatch
    Receiver: a SquotMerge (0 conflicts, 0 changes, 1 merges)
    Arguments and temporary variables: 
        builder:    a SquotPatchBuilder
    Receiver's instance variables: 
        base:   commit afc45a3 "Update README.md with a current progress and basic usage ...etc...
        working:    TraceDebugger
        incoming:   a SquotSnapshot
        containerConflicts:     a Dictionary()
        containerModifications:     a Dictionary()
        elementMerges:  a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...
        loadOrderConflicts:     nil
        loadOrderMerge:     a SquotLoadOrderMerge (1 conflicts, 0 changes, 0 merges)
        customizedLoadOrder:    nil

SquotMerge(SquotAbstractMerge)>>resolvedPatch
    Receiver: a SquotMerge (0 conflicts, 0 changes, 1 merges)
    Arguments and temporary variables: 

    Receiver's instance variables: 
        base:   commit afc45a3 "Update README.md with a current progress and basic usage ...etc...
        working:    TraceDebugger
        incoming:   a SquotSnapshot
        containerConflicts:     a Dictionary()
        containerModifications:     a Dictionary()
        elementMerges:  a Dictionary('packages/TraceDebuggerBenchmarks.package'->a SquotArtifactMerge...etc...
        loadOrderConflicts:     nil
        loadOrderMerge:     a SquotLoadOrderMerge (1 conflicts, 0 changes, 0 merges)
        customizedLoadOrder:    nil

[] in SquotWorkingCopy>>mergeSilently:basedOn:onConflictsDo:
    Receiver: TraceDebugger
    Arguments and temporary variables: 
        incomingObjectContainer:    a SquotSnapshot
        baseObjectContainer:    commit afc45a3 "Update README.md with a current progress a...etc...
        aBlock:     [closure] in [] in SquotWorkingCopy>>switchAndMoveUnsavedChangesOverTo:...etc...
        merge:  a SquotMerge (0 conflicts, 0 changes, 1 merges)
    Receiver's instance variables: 
        name:   'TraceDebugger'
        store:  a SquotImageStore
        repository:     a SquitRepository
        loadedHistorian:    a SquitHistorian('refs/heads/benchmarks')
        previousVersionId:  nil
        previousSnapshot:   nil
        previouslySavedArtifacts:   a Dictionary()
        shouldStoreMetadata:    nil
        additionalParents:  nil
        loadedVersion:  commit 2cd976a "Increase robustnesss of historic bench results p...etc...
        newVersionMessage:  nil
        unloadedArtifacts:  a Dictionary(''->a SquotUnrecordedFilesArtifact('') )
        loadOrder:  an OrderedCollection('packages/BaselineOfTraceDebugger.package' 'packages/TraceDebugger.package...etc...

[] in SquotWorkingCopy>>withCurrentSnapshot:
    Receiver: TraceDebugger
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotWorkingCopy>>mergeSilently:basedOn:onConflictsDo:
        currentSnapshot:    a SquotSnapshot
    Receiver's instance variables: 
        name:   'TraceDebugger'
        store:  a SquotImageStore
        repository:     a SquitRepository
        loadedHistorian:    a SquitHistorian('refs/heads/benchmarks')
        previousVersionId:  nil
        previousSnapshot:   nil
        previouslySavedArtifacts:   a Dictionary()
        shouldStoreMetadata:    nil
        additionalParents:  nil
        loadedVersion:  commit 2cd976a "Increase robustnesss of historic bench results p...etc...
        newVersionMessage:  nil
        unloadedArtifacts:  a Dictionary(''->a SquotUnrecordedFilesArtifact('') )
        loadOrder:  an OrderedCollection('packages/BaselineOfTraceDebugger.package' 'packages/TraceDebugger.package...etc...

--- The full stack ---
SquotDiffOfEqualObjects(Object)>>doesNotUnderstand: #object
[] in SquotObjectGraphMerge>>privateResolvedPatch
[] in Dictionary>>valuesDo:
Dictionary>>associationsDo:
Dictionary>>valuesDo:
Dictionary>>do:
SquotObjectGraphMerge>>privateResolvedPatch
SquotObjectGraphMerge(SquotAbstractMerge)>>resolvedPatch
SquotArtifactMerge>>privateResolvedPatch
SquotArtifactMerge(SquotAbstractMerge)>>resolvedPatch
[] in SquotMerge>>privateResolvedPatch
[] in Dictionary>>valuesDo:
Dictionary>>associationsDo:
Dictionary>>valuesDo:
Dictionary>>do:
SquotMerge>>privateResolvedPatch
SquotMerge(SquotAbstractMerge)>>resolvedPatch
[] in SquotWorkingCopy>>mergeSilently:basedOn:onConflictsDo:
[] in SquotWorkingCopy>>withCurrentSnapshot:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[] in SquotCurrentWorkingCopySnapshotBlock class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
SquotCurrentWorkingCopySnapshotBlock class(DynamicVariable class)>>value:during:
SquotWorkingCopy>>withCurrentSnapshot:
SquotWorkingCopy>>mergeSilently:basedOn:onConflictsDo:
[] in SquotWorkingCopy>>switchAndMoveUnsavedChangesOverTo:
[] in MorphicUIManager(UIManager)>>informUser:during:
[] in [] in MorphicUIManager>>displayProgress:at:from:to:during:
FullBlockClosure(BlockClosure)>>on:do:
[] in MorphicUIManager>>displayProgress:at:from:to:during:
FullBlockClosure(BlockClosure)>>ensure:
MorphicUIManager>>displayProgress:at:from:to:during:
ProgressInitiationException>>defaultResumeValue
ProgressInitiationException(Exception)>>resume
ProgressInitiationException>>defaultAction
UndefinedObject>>handleSignal:
ProgressInitiationException(Exception)>>signal
ProgressInitiationException>>display:at:from:to:during:
ProgressInitiationException class>>display:at:from:to:during:
SystemProgressMorph class>>informUserAt:during:
MorphicUIManager>>informUserDuring:
MorphicUIManager(UIManager)>>informUser:during:
SquotGUI class>>displayStatus:during:
SquotProgress>>displayStatus:during:
SquotProgress class>>displayStatus:during:
SquotWorkingCopy>>switchAndMoveUnsavedChangesOverTo:
[] in SquitBrowser>>actionBranchSwitchMoveOver
[] in GitCurrentUnitOfWork class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
GitCurrentUnitOfWork class(DynamicVariable class)>>value:during:
GitCurrentUnitOfWork class>>value:for:during:
GitUnitOfWork>>activateDuring:
SquitUnitOfWork>>activateDuring:
[] in SquitBrowser>>withUnitOfWork:
FullBlockClosure(BlockClosure)>>ensure:
SquitBrowser>>withUnitOfWork:
SquitBrowser>>actionBranchSwitchMoveOver
SquitBrowser(Object)>>perform:orSendTo:
[] in MenuItemMorph>>invokeWithEvent:
FullBlockClosure(BlockClosure)>>ensure:
CursorWithMask(Cursor)>>showWhile:
MenuItemMorph>>invokeWithEvent:
-- and more not shown --
j4yk commented 2 years ago

Reproduced. Although I made my life difficult by doing this in a Tonel repository and stumbling upon other errors (#366).

j4yk commented 2 years ago

I believe I have fixed this error now, but only in a workaround-ish manner. The composition of the objects inside the SquotMerge is not what I would have expected in this situation you described... Same thing that I also described in this comment: https://github.com/hpi-swa/Squot/pull/357#issuecomment-1008359498

LinqLover commented 2 years ago

Thank you! I will close the issue unless I experience the bug again. :-)