hpi-swa / Squot

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

Remove break in production #357

Closed LinqLover closed 2 years ago

LinqLover commented 2 years ago

Thank you! I will report when I see the Halt the next time. :-)

LinqLover commented 2 years ago

Here is an occurence of that #isThisEverCalled:

Bug Report
9 January 2022 7:48:55.699111 pm

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

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

SquotNameDecorator class(Object)>>halt:
    Receiver: SquotNameDecorator
    Arguments and temporary variables: 
        aString:    'This is indeed called: ''If this is ever called, you found a bug! Please send a bug report and then press Proceed.'...etc...
    Receiver's instance variables: 
        superclass:     SquotDecorator
        methodDict:     a MethodDictionary(#=->(SquotNameDecorator>>#= "a CompiledMethod(16...etc...
        format:     65538
        instanceVariables:  #('name')
        organization:   ('comparing' = hash)
('initialize-release' decorated:withName:)
(...etc...
        subclasses:     nil
        name:   #SquotNameDecorator
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'

SquotNameDecorator class(Object)>>isThisEverCalled:
    Receiver: SquotNameDecorator
    Arguments and temporary variables: 
        msg:    'If this is ever called, you found a bug! Please send a bug report and then press Proceed....etc...
    Receiver's instance variables: 
        superclass:     SquotDecorator
        methodDict:     a MethodDictionary(#=->(SquotNameDecorator>>#= "a CompiledMethod(16...etc...
        format:     65538
        instanceVariables:  #('name')
        organization:   ('comparing' = hash)
('initialize-release' decorated:withName:)
(...etc...
        subclasses:     nil
        name:   #SquotNameDecorator
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'

SquotNameDecorator class>>squotMirror
    Receiver: SquotNameDecorator
    Arguments and temporary variables: 

    Receiver's instance variables: 
        superclass:     SquotDecorator
        methodDict:     a MethodDictionary(#=->(SquotNameDecorator>>#= "a CompiledMethod(16...etc...
        format:     65538
        instanceVariables:  #('name')
        organization:   ('comparing' = hash)
('initialize-release' decorated:withName:)
(...etc...
        subclasses:     nil
        name:   #SquotNameDecorator
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'

SquotObjectReplacement>>referenceDiffsWithDefaultOwners:reflectedIn:do:
    Receiver: a SquotObjectReplacement
    Arguments and temporary variables: 
        leftAndRightShadows:    {a SquotPackageShadow of TraceDebuggerBenchmarks . a SquotPackageShadow...etc...
        aMirror:    a SquotPackageShadowMirror
        aBlock:     [closure] in SquotPatcher>>apply:from:to:reflectedIn:inGraph:original:reflectedIn:patched:reflectedIn:diffsOfReferenceValuesDo:...etc...
        leftMirror:     nil
        sameMirror:     nil
    Receiver's instance variables: 
        left:   a SquotPackageShadow of TraceDebuggerBenchmarks ''
        right:  a SquotPackageShadow of TraceDebuggerBenchmarks ''

SquotPatcher>>apply:from:to:reflectedIn:inGraph:original:reflectedIn:patched:reflectedIn:diffsOfReferenceValuesDo:
    Receiver: a SquotPatcher
    Arguments and temporary variables: 
        diff:   a SquotObjectReplacement
        aGraphDiff:     a SquotObjectGraphDiff (1 changed objects)
        targetObject:   a PackageInfo(TraceDebuggerBenchmarks)
        mirror:     a SquotPackageMirror
        anObjectGraph:  a SquotMutableObjectGraph
        oldShadow:  a SquotPackageShadow of TraceDebuggerBenchmarks
        oldShadowMirror:    a SquotPackageShadowMirror
        newShadow:  a SquotPackageShadow of TraceDebuggerBenchmarks
        shadowMirror:   a SquotPackageShadowMirror
        walkBlock:  [closure] in SquotPatcher>>apply:toLoadedGraph:
        remaining:  an OrderedCollection()
        object:     a PackageInfo(TraceDebuggerBenchmarks)
    Receiver's instance variables: 
        objectRegistry:     a SquotMutableObjectGraph
        sourceGraph:    a SquotShadowGraph
        pendingOutgoingReferences:  an IdentityDictionary(a SquotMutableObjectGraph->an OrderedCollection...etc...
        pendingIncomingReferences:  an IdentityDictionary(a SquotPackageShadow of TraceD...etc...
        pendingIncomingReferencesForHash:   an IdentityDictionary()
        treatedObjects:     an IdentityDictionary(a SquotPackageShadow of TraceDebuggerBenc...etc...

SquotPatcher>>apply:toLoadedGraph:
    Receiver: a SquotPatcher
    Arguments and temporary variables: 
        aGraphDiff:     a SquotObjectGraphDiff (1 changed objects)
        anObjectGraph:  a SquotMutableObjectGraph
        walk:   a SquotGraphWalk(0 visited in 2 steps, 0 remaining, 0 path checks)
        next:   {a SquotObjectReplacement . a PackageInfo(TraceDebuggerBenchmarks) . a SquotPackageMirror...etc...
        diff:   a SquotObjectReplacement
        object:     a PackageInfo(TraceDebuggerBenchmarks)
        mirror:     a SquotPackageMirror
        newShadow:  a SquotPackageShadow of TraceDebuggerBenchmarks
        shadowMirror:   a SquotPackageShadowMirror
        oldShadow:  a SquotPackageShadow of TraceDebuggerBenchmarks
        oldShadowMirror:    a SquotPackageShadowMirror
    Receiver's instance variables: 
        objectRegistry:     a SquotMutableObjectGraph
        sourceGraph:    a SquotShadowGraph
        pendingOutgoingReferences:  an IdentityDictionary(a SquotMutableObjectGraph->an OrderedCollection...etc...
        pendingIncomingReferences:  an IdentityDictionary(a SquotPackageShadow of TraceD...etc...
        pendingIncomingReferencesForHash:   an IdentityDictionary()
        treatedObjects:     an IdentityDictionary(a SquotPackageShadow of TraceDebuggerBenc...etc...

SquotObjectGraphDiff>>squotApplyToLoaded:
    Receiver: a SquotObjectGraphDiff (1 changed objects)
    Arguments and temporary variables: 
        anObjectGraph:  a SquotMutableObjectGraph
    Receiver's instance variables: 
        left:   a SquotShadowGraph
        right:  a SquotShadowGraph
        diffs:  a Dictionary(#()->a SquotObjectReplacement )
        startObjectName:    #()
        shadows:    a Dictionary()

SquotArtifactModification>>applyToLoaded:
    Receiver: a SquotArtifactModification 'packages/TraceDebuggerBenchmarks.package'
    Arguments and temporary variables: 
        anObject:   a SquotMutableObjectGraph
    Receiver's instance variables: 
        left:   'packages/TraceDebuggerBenchmarks.package' in a SquotImageStore
        right:  a SquotArtifact('packages/TraceDebuggerBenchmarks.package')
        isLoadedInWorkingCopy:  false
        diffContent:    a SquotObjectGraphDiff (1 changed objects)
        metadataDiff:   a SquotTrackedObjectMetadataDiff (0 changes)
        topNodes:   nil
        willBeLoaded:   true

[] in [] in SquotImageStore>>applyDiff:toObjectAt:
    Receiver: a SquotImageStore
    Arguments and temporary variables: 
        anArtifactDiff:     a SquotArtifactModification 'packages/TraceDebuggerBenchmarks.package...etc...
        path:   'packages/TraceDebuggerBenchmarks.package'
        object:     a PackageInfo(TraceDebuggerBenchmarks)
        graph:  a SquotMutableObjectGraph
        metadata:   a SquotTrackedObjectMetadata(#environment->Smalltalk #objectClassName...etc...
    Receiver's instance variables: 
        objects:    a Dictionary('packages/BaselineOfTraceDebugger.package'->a PackageInfo...etc...
        paths:  an IdentityDictionary(a PackageInfo(BaselineOfTraceDebugger)->a Set('packages/BaselineOfTraceDebugger.package...etc...
        environment:    Smalltalk
        additionalInfo:     a Dictionary('packages/BaselineOfTraceDebugger.package'->a SquotTrackedObjectMetadata...etc...
        objectRegistry:     a SquotObjectRegistry
        objectGraphs:   a WeakIdentityKeyDictionary(a PackageInfo(BaselineOfTraceDebugger...etc...
        loadOrder:  an OrderedCollection('packages/BaselineOfTraceDebugger.package' 'packages/TraceDebugger.package...etc...

[] in SquotCurrentMetadata class(DynamicVariable class)>>value:during:
    Receiver: SquotCurrentMetadata
    Arguments and temporary variables: 
        anObject:   a SquotTrackedObjectMetadata(#environment->Smalltalk #objectClassName...etc...
        aBlock:     [closure] in [] in SquotImageStore>>applyDiff:toObjectAt:
        p:  a Process(41306) in MorphicDebugger class>>openOn:context:label:contents:fullView:...etc...
        oldValue:   nil
        outerScopeWasDynamic:   false
    Receiver's instance variables: 
        superclass:     DynamicVariable
        methodDict:     a MethodDictionary()
        format:     0
        instanceVariables:  nil
        organization:   ('as yet unclassified')

        subclasses:     nil
        name:   #SquotCurrentMetadata
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'
        hash:   264942244

FullBlockClosure(BlockClosure)>>ensure:
    Receiver: [closure] in SquotCurrentMetadata class(DynamicVariable class)>>value:during:
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotCurrentMetadata class(DynamicVariable class)>>value:during:...etc...
        complete:   nil
        returnValue:    nil
    Receiver's instance variables: 
        outerContext:   SquotCurrentMetadata class(DynamicVariable class)>>value:during:
        startpcOrMethod:    ([] in DynamicVariable class>>#value:during: "a CompiledBlock(...etc...
        numArgs:    0
        receiver:   SquotCurrentMetadata

SquotCurrentMetadata class(DynamicVariable class)>>value:during:
    Receiver: SquotCurrentMetadata
    Arguments and temporary variables: 
        anObject:   a SquotTrackedObjectMetadata(#environment->Smalltalk #objectClassName...etc...
        aBlock:     [closure] in [] in SquotImageStore>>applyDiff:toObjectAt:
        p:  a Process(41306) in MorphicDebugger class>>openOn:context:label:contents:fullView:...etc...
        oldValue:   nil
        outerScopeWasDynamic:   false
    Receiver's instance variables: 
        superclass:     DynamicVariable
        methodDict:     a MethodDictionary()
        format:     0
        instanceVariables:  nil
        organization:   ('as yet unclassified')

        subclasses:     nil
        name:   #SquotCurrentMetadata
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'
        hash:   264942244

[] in SquotImageStore>>applyDiff:toObjectAt:
    Receiver: a SquotImageStore
    Arguments and temporary variables: 
        anArtifactDiff:     a SquotArtifactModification 'packages/TraceDebuggerBenchmarks.package...etc...
        path:   'packages/TraceDebuggerBenchmarks.package'
        object:     a PackageInfo(TraceDebuggerBenchmarks)
        graph:  a SquotMutableObjectGraph
        metadata:   a SquotTrackedObjectMetadata(#environment->Smalltalk #objectClassName...etc...
    Receiver's instance variables: 
        objects:    a Dictionary('packages/BaselineOfTraceDebugger.package'->a PackageInfo...etc...
        paths:  an IdentityDictionary(a PackageInfo(BaselineOfTraceDebugger)->a Set('packages/BaselineOfTraceDebugger.package...etc...
        environment:    Smalltalk
        additionalInfo:     a Dictionary('packages/BaselineOfTraceDebugger.package'->a SquotTrackedObjectMetadata...etc...
        objectRegistry:     a SquotObjectRegistry
        objectGraphs:   a WeakIdentityKeyDictionary(a PackageInfo(BaselineOfTraceDebugger...etc...
        loadOrder:  an OrderedCollection('packages/BaselineOfTraceDebugger.package' 'packages/TraceDebugger.package...etc...

[] in SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:
    Receiver: SquotActiveObjectRegistry
    Arguments and temporary variables: 
        anObject:   a SquotObjectRegistry
        aBlock:     [closure] in SquotImageStore>>applyDiff:toObjectAt:
        p:  a Process(41306) in MorphicDebugger class>>openOn:context:label:contents:fullView:...etc...
        oldValue:   nil
        outerScopeWasDynamic:   false
    Receiver's instance variables: 
        superclass:     DynamicVariable
        methodDict:     a MethodDictionary()
        format:     0
        instanceVariables:  nil
        organization:   ('as yet unclassified')

        subclasses:     nil
        name:   #SquotActiveObjectRegistry
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'
        hash:   11901448

FullBlockClosure(BlockClosure)>>ensure:
    Receiver: [closure] in SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:...etc...
        complete:   nil
        returnValue:    nil
    Receiver's instance variables: 
        outerContext:   SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:...etc...
        startpcOrMethod:    ([] in DynamicVariable class>>#value:during: "a CompiledBlock(...etc...
        numArgs:    0
        receiver:   SquotActiveObjectRegistry

SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:
    Receiver: SquotActiveObjectRegistry
    Arguments and temporary variables: 
        anObject:   a SquotObjectRegistry
        aBlock:     [closure] in SquotImageStore>>applyDiff:toObjectAt:
        p:  a Process(41306) in MorphicDebugger class>>openOn:context:label:contents:fullView:...etc...
        oldValue:   nil
        outerScopeWasDynamic:   false
    Receiver's instance variables: 
        superclass:     DynamicVariable
        methodDict:     a MethodDictionary()
        format:     0
        instanceVariables:  nil
        organization:   ('as yet unclassified')

        subclasses:     nil
        name:   #SquotActiveObjectRegistry
        classPool:  nil
        sharedPools:    nil
        environment:    Smalltalk
        category:   #'Squot-Capturing'
        hash:   11901448

SquotImageStore>>activateObjectRegistryDuring:
    Receiver: a SquotImageStore
    Arguments and temporary variables: 
        aBlock:     [closure] in SquotImageStore>>applyDiff:toObjectAt:
    Receiver's instance variables: 
        objects:    a Dictionary('packages/BaselineOfTraceDebugger.package'->a PackageInfo...etc...
        paths:  an IdentityDictionary(a PackageInfo(BaselineOfTraceDebugger)->a Set('packages/BaselineOfTraceDebugger.package...etc...
        environment:    Smalltalk
        additionalInfo:     a Dictionary('packages/BaselineOfTraceDebugger.package'->a SquotTrackedObjectMetadata...etc...
        objectRegistry:     a SquotObjectRegistry
        objectGraphs:   a WeakIdentityKeyDictionary(a PackageInfo(BaselineOfTraceDebugger...etc...
        loadOrder:  an OrderedCollection('packages/BaselineOfTraceDebugger.package' 'packages/TraceDebugger.package...etc...

SquotImageStore>>applyDiff:toObjectAt:
    Receiver: a SquotImageStore
    Arguments and temporary variables: 
        anArtifactDiff:     a SquotArtifactModification 'packages/TraceDebuggerBenchmarks.package...etc...
        path:   'packages/TraceDebuggerBenchmarks.package'
        object:     a PackageInfo(TraceDebuggerBenchmarks)
        graph:  a SquotMutableObjectGraph
        metadata:   a SquotTrackedObjectMetadata(#environment->Smalltalk #objectClassName...etc...
    Receiver's instance variables: 
        objects:    a Dictionary('packages/BaselineOfTraceDebugger.package'->a PackageInfo...etc...
        paths:  an IdentityDictionary(a PackageInfo(BaselineOfTraceDebugger)->a Set('packages/BaselineOfTraceDebugger.package...etc...
        environment:    Smalltalk
        additionalInfo:     a Dictionary('packages/BaselineOfTraceDebugger.package'->a SquotTrackedObjectMetadata...etc...
        objectRegistry:     a SquotObjectRegistry
        objectGraphs:   a WeakIdentityKeyDictionary(a PackageInfo(BaselineOfTraceDebugger...etc...
        loadOrder:  an OrderedCollection('packages/BaselineOfTraceDebugger.package' 'packages/TraceDebugger.package...etc...

SquotArtifactModification(SquotArtifactDiff)>>applyToContainer:
    Receiver: a SquotArtifactModification 'packages/TraceDebuggerBenchmarks.package'
    Arguments and temporary variables: 
        anObjectContainer:  a SquotImageStore
    Receiver's instance variables: 
        left:   'packages/TraceDebuggerBenchmarks.package' in a SquotImageStore
        right:  a SquotArtifact('packages/TraceDebuggerBenchmarks.package')
        isLoadedInWorkingCopy:  false
        diffContent:    a SquotObjectGraphDiff (1 changed objects)
        metadataDiff:   a SquotTrackedObjectMetadataDiff (0 changes)
        topNodes:   nil
        willBeLoaded:   true

--- The full stack ---
SquotNameDecorator class(Object)>>halt:
SquotNameDecorator class(Object)>>isThisEverCalled:
SquotNameDecorator class>>squotMirror
SquotObjectReplacement>>referenceDiffsWithDefaultOwners:reflectedIn:do:
SquotPatcher>>apply:from:to:reflectedIn:inGraph:original:reflectedIn:patched:reflectedIn:diffsOfReferenceValuesDo:
SquotPatcher>>apply:toLoadedGraph:
SquotObjectGraphDiff>>squotApplyToLoaded:
SquotArtifactModification>>applyToLoaded:
[] in [] in SquotImageStore>>applyDiff:toObjectAt:
[] in SquotCurrentMetadata class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
SquotCurrentMetadata class(DynamicVariable class)>>value:during:
[] in SquotImageStore>>applyDiff:toObjectAt:
[] in SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
SquotActiveObjectRegistry class(DynamicVariable class)>>value:during:
SquotImageStore>>activateObjectRegistryDuring:
SquotImageStore>>applyDiff:toObjectAt:
SquotArtifactModification(SquotArtifactDiff)>>applyToContainer:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SquotImageStore>>applyDiff:
SquotWorkingCopy>>applyDiff:toObjectAt:
SquotArtifactModification(SquotArtifactDiff)>>applyToContainer:
SquotWorkingCopy>>applyDiff:
[] in SquotPatch>>privateApplyTo:diffsDoing:
[] in [] in Array(Collection)>>do:displayingProgress:every:
Array(SequenceableCollection)>>do:
[] in Array(Collection)>>do:displayingProgress:every:
[] 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:
ByteString(String)>>displayProgressAt:from:to:during:
ByteString(String)>>displayProgressFrom:to:during:
Array(Collection)>>do:displayingProgress:every:
Array(Collection)>>do:displayingProgress:
SquotGUI class>>displayProgress:for:do:
SquotProgress>>display:for:do:
SquotProgress class>>display:for:do:
[] in SquotPatch>>applyTo:displayingProgress:
SquotPatch>>privateApplyTo:diffsDoing:
SquotPatch>>applyTo:displayingProgress:
SquotWorkingCopy>>applyPatch:
[] in SquotInteractiveMerge(SquotMergeOperation)>>applyToWorkingCopy
[] in [] in SquotInteractiveMerge(SquotWorkingCopyOperation)>>withUnitOfWork:
[] 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:
SquotInteractiveMerge(SquotWorkingCopyOperation)>>withUnitOfWorkActive:
[] in SquotInteractiveMerge(SquotWorkingCopyOperation)>>withUnitOfWork:
FullBlockClosure(BlockClosure)>>ensure:
-- and more not shown --
j4yk commented 2 years ago

Damn SquotObjectReplacements... I wonder why it did not compare the two package versions and rather assumed that something has been removed and something else been added at the same path. Can you please tell me exactly the situation of this merge, and what you have been doing leading up to that merge?

LinqLover commented 2 years ago

Will do next time!

j4yk commented 2 years ago

My guess would be that you had an addition conflict (like in one of the issues you reported today), and the cause for the replacement lies in SquotObjectAdditionConflict>>chooseIncoming. That should happen if you "switch, but keep uncommitted changes" to the branch that has the package committed, and choose the uncommitted re-added package which is still loaded in the image.

Edit: I can observe that it creates a SquotArtifactMerge (rather than a conflict of two added artifacts) for the two package versions, but the SquotObjectGraphMerge inside (which is supposed to merge the two object graphs that each only contain the respective SquotPackageShadow of the same package) has an addition conflict for the two package shadows. I would rather have expected either a conflict of the two artifacts (i. e. a conflict instead of the SquotArtifactMerge in the SquotMerge), or that it can make a SquotPackageMerge rather than this addition conflict if it does indeed merge the two artifacts...

image

j4yk commented 2 years ago

I just hit this myself while testing a fix for #364.