Michael Neumann wrote:
> Hi all,
>
> Is there anyone interested in joining a project that aims at creating a
> Monotone (www.venge.net/monotone) inspired distributed configuration
> management system in Ruby?
>
> Major goal is clean and understandable code, good abstractions and high code
> quality, from which further ideas could be implemented more easily than is
> the case for Monotone (at least for me).
>
> Ultimate goal of course is the switch from CVS to RCM for the development of
> the ruby interpreter
This wouldn't make any sense for the development of the interpreter,
but for library level code, it would be interesting to consider a
Ruby-specific approach: rather than model a file in terms of lines of
text, model it as Ruby class and method definitions, and do all of the
merging and diffing based on that. What you lose is any ability to
version other kinds of code, like associated C or YAML files. But you
gain a much simpler and cleaner model (almost all of the hard, annoying
problems when writing an SCM have to do with textual diffs; take that
away and you're left with the fun conceptual part), and a much
friendlier tool to use: spurious merge conflicts become a thing of the
past; you can autogenerate meaningful, detailed changelogs; you can
properly track changes that a traditional SCM would never notice
(forget file renaming, think about moving a single method or class
between two files...).
This is the approach we took when building the Monticello version
control system for Squeak. The first version, which is currently in
widespread use (hundreds of packages and several large commercial
projects), has a very similar design to monotone (unfortunately we
hadn't seen monotone yet when we wrote it, and so didn't think to use
public key crypto the way monotone does, which is too bad because it's
a very cool idea). The second version, which is only now nearing
usability, is much closer to Bram Cohen's Codeville - which has turned
out to be a great model in terms of code elegance and potential
flexibility, although we've yet to see how it works out in real-world
use.
Of course it's easier to take this approach for Smalltalk (which
already has a method-level IDE) than it would be for Ruby, but since
the SCM only needs to "understand" Ruby code at about the same level as
RDoc, it shouldn't be all that bad either.
I don't really expect people to jump on this bandwagon - I realize that
part of the appeal of Ruby over Smalltalk is that it lives firmly in
the world of text files, and this would take it slightly away from
that. But I thought I'd give it a shot anyway.
Avi