[Seaside] monticello remote repositories

Julian Fitzell seaside@lists.squeakfoundation.org
Sun, 29 Dec 2002 18:39:46 -0800


Andreas,

I agree that 3-way merging is probably less useful in Squeak than in 
other languages since methods do often end up being very short.  I'm not 
convinced though, that you couldn't to 3-way merge at a finer 
granularity than line-by-line.  I think by analyzing the parsed method 
you ought to be able to tell, for example that if you had:

foo
   ^ self bar

And the two modified versions:

foo
   ^ self bar asString

and

foo
   ^ someBool ifTrue: [self bar] ifFalse: [self baz]

You might well be able to merge both of these changes into:

foo
   ^ someBool ifTrue: [self bar asString] ifFalse: [self baz]


I haven't given this too much thought, nor have I even looked in much 
detail at the parsed structure of the method, so I way well be 
completely wrong.  But it's still an interesting idea! :)

But I certainly concede that having automated 3-way merge is by no means 
a necessity and probably of less need in Squeak code than in C code for 
example.

I still don't quite see how a diff between my modified version and the 
version on the server is helpful, though.  It seems to me that that diff 
would contain both the changes made between the two repository versions 
and the *reverse* (ie removal) of the changes made in your local copy.

This is where I was wondering if I was misunderstanding you or if I'm 
just not seeing the benefit.  I certianly think that long before 
automated merging is done, being able to see all 3 versions and their 
respective diffs would be useful.

Julian

Andreas Raab wrote:
> Julian,
> 
> I think that three way merging/diffing is probably overrated in the
> praxis of Squeak (or any other Smalltalk) coding. Three way merges/diffs
> are mostly needed if the granularity of the code you are looking at is
> very large (e.g., at the file level or at very long method level). For
> most portions of code I have ever looked at in Squeak (and believe me
> it's been lots ;-) I have hardly ever needed the three-way comparison.
> Mostly because if you see a diff against *your* code (e.g., code that
> you have modified) and use the source code manager in a reasonable way
> (by which I mean to update every now and then and not every other year)
> you can usually remember what the point of a particular change was and
> see if that update addresses the problem or obsoletes it or relates to
> it at all. From my personal experiences that's mostly what you need.
> 
> Most cases I remember where I wanted three way diffs were exactly what I
> described above - either "large methods" (like Interpreter
> class>>initializePrimitiveTable) or places where I wanted to compare
> changes on a "file level" (e.g., seeing all the changes being done in a
> particular class). Yet, I would still argue that these fall into the 5%
> category ;-)
> 
> So I'm not claiming that you never need a three way merge/comparison.
> But I think you could cover lots and lots of grounds by just using
> what's already there. 
> 
> Cheers,
>   - Andreas



-- 
julian@beta4.com
Beta4 Productions (http://www.beta4.com)