[squeak-dev] Trax

Stephen Pair stephen at pairhome.net
Sun Feb 28 15:41:30 UTC 2010

With all of the recent interest in version control for squeak (and git,
bazaar, mercurial, etc), I figured I should mention a project I was working
on a couple years ago and which has stagnated (due to my shift in attention
to another project).  I've never published this code before (and haven't
just yet, but will if there is interest).  I've uploaded a vide here:

Trax was inspired by git (but does not use git).  Its repository format is
very similar (but not identical) to git.  There are some differences in how
I chose to handle repository replication and merging of tags.  I hope others
working on similar projects might find it useful (for either reusing code or
just some ideas).  I certainly prefer an all Smalltalk version control
system (all things being equal), however it might ultimately be more
practical to leverage the countless work put into one of the popular version
control systems and taking some of Trax and integrating it with git (or
bazaar, mercurial or whatever) would be interesting.

Sorry for the crude nature of the video, it was originally meant only as a
dry run and to help me create a script for a more polished video (and sorry
for no docs, I do prefer written, searchable docs to videos, but videos are
much quicker to produce).  Below is the video description and a few

This video is a demonstration of Trax, a git inspired object versioning
system for squeak. Any object that can be serialized can be stored and
versioned in Trax and the lineage of those objects can be browsed in the
version history browser. Additionally, I plugged Monticello packages into
Trax such that Smalltalk source code can be versioned. I modified the
package browser to make it possible to commit packages directly from it and
I created an n-way merge tool. Below are some notable points where various
topics are discussed. Sorry for the watermark and disorganization...this
video was a first cut that was originally intended to just be used in
creating a script for a final, more polished presentation. Due to a lack of
time and the need to work on another project, I've decided to just publish
this raw video in the hopes it might inspire others to pickup the code,
reuse it in other projects, or just get a few ideas.

00:00 - intro
07:00 - discussion of the underlying file structure
26:30 - introduction of the version history browser
36:00 - introduction to the Smalltalk n-way merge tool
38:40 - demo of a 3 way merge
41:00 - demo of committing code from the package browser (and showing the
lineage of a 3 way merge in the version history browser)
53:35 - demo of tagging a version
54:00 - demo of publishing to one repo, then replicating to another repo

Here is a screen shot of the version browser:

Here is a screenshot of the Smalltalk n-way code merge tool (showing a 3-way
merge in progress):

And, here is a screenshot of the commit dialog:

- Stephen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20100228/0cdb9673/attachment.htm

More information about the Squeak-dev mailing list