To throw some more oil in the file.
This is how versioning will work in Pharo:
===================================================================================
1. I prepared a complete FileSystem representation of all the units in the image
- Packages
- Classes
- Methods
2. Model Resources instead of saving them in CompiledMethod
- Packages have resources
- Classes have resources
- The resources themselves are a complete FileSystem allowing for all normal FS operations
- See the attached image for a working prototype
3. Choose a decent, existing, stable versioning system (Since I know GIT it's git)
- it must be distributed
- it must be stable
- it must support lazy loading
4. Supporting versioning of the internal tree structure
- copy over the internal tree to the git repos
- create a new commit message
- upload it to some remote / external / local repository
5. Rewrite .changes file to work on top of a similar structure
- cache the changes methods in a local git repos
- commit on a regular interval
- add support for restoring that
6. Rewrite existing method versions on top of a similar structure
- lazily load the versions from a remote git location
- hold the sources in a central git repository (much like PharoV10.sources)
===================================================================================
I will provide a working prototype within a week, cause this issue is
annoying me so much that it makes me feel like a complete retard when
using pharo.