hpi-swa / Squot

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

Artifact metadata differences are not accounted for #302

Closed j4yk closed 2 years ago

j4yk commented 3 years ago

Artifacts are the members of working copies and project snapshots. Each combines a rooted object graph and some metadata about it, such as the original class of the root object, or the cut-set of object references that separates the graph from the rest of the object memory (e. g., the owner instance variable of a morph if it is the root object). The metadata is organized in a dictionary of class SquotTrackedObjectMetdata.

However, diffs of artifacts currently only account for the differences between the object graphs, but not for the differences between the metadata. The only thing that is implemented is that when diffs are applied to artifacts, the metadata of the right-side artifact is "merged" into the target artifact's metadata. But "merge" does not mean a real merge of the metadata, which could have conflicts, but rather that common properties of the metadata from both sides are overridden with the value from the right-side metadata.

The metadata is significant for object graphs in general, so content creators should be able to track and control modifications to them. Not so much for Monticello packages, which have a simple tree structure and are by definition already a subset of the overall Smalltalk class hierarchy.

This was noted as problematic in #300. If #297 is realized and metadata shall be used to indicate how objects should be stored in a Squeak image, this issue would be a blocker.