2 pm, post lunchtime slump - time for Colin Putney to tell us about Monticello (version 2), a source code control system for Squeak. Here's Colin getting ready to start:
When they started Monticello, they realized that typical version control systems wasn't what they needed for their purposes. Merging was crucial, because - given the nature of the Squeak community - there's a big need to merge code from disparate sources. The first rev of Monticello didn't actually do a lot more than merges.
Colin is discussing the hard problem of merging branches of code, and the kinds of approaches that are possible. The problem gets harder, of course, as the branches diverge over time. They took an approach of recording the ancestry of methods over time so that they can merge at the method level in an image, rather than at the package level.
A Smalltalk specific issue for a version control system - how to update (safely) a running system. In Store, you can run into this issue if you save your package as source (rather than binary), and then load a package from PostGreSQL that modifies sockets. Whoops - the PostGreSQL connect uses sockets. Solution - save the package binary. The better answer is one that Monticello is moving to, and Store is also moving to: compile the code in a sandbox, and then do an atomic load.
They ran into the problem due to some performance issues inherent in the way they were versioning code. The basic stuff -
- Elements (code artifacts)
- Versions (of elements)
- Slice (A collection of elements)