Modules

Doug Way dway at mailcan.com
Sat Feb 26 16:18:05 UTC 2005


On Feb 25, 2005, at 9:46 PM, Jon Hylands wrote:

> On Fri, 25 Feb 2005 19:27:30 -0500, "Doug Way" <dway at mailcan.com> 
> wrote:
>
>> Envy actually has no automatic merging capability whatsoever.  Which 
>> is
>> odd, since you have fine-grained versioning (down to the method level)
>> in Envy, so it wouldn't have been hard to write an Envy tool which 
>> would
>> at least do a 3-way merge on a class and merge the non-conflicting
>> methods for you.  You wouldn't need a text-based merge algorithm for
>> that.  I think the Envy designers just never thought to add merge
>> capability.
>
> Envy uses an operational model that makes it easier to avoid getting 
> in the
> situation where you need to do a merge. You can't make changes to a 
> class
> without creating an edition of it, and that shows up in the 
> repository, so
> anyone else can see that you are working on it.
>
> Its basically like the difference between optimistic locking 
> (Store/MC) and
> pessimistic locking (Envy). They never bothered handling it because if 
> you
> follow the class ownership model, and use the tools the way they are
> supposed to be used, you almost never need to do merges.

You're right, I had forgotten that Envy used a (optionally) pessimistic 
locking system, because the last time I used Envy, our team treated it 
as an optimistic system and we ignored the code ownership facilities.

I realize now that there are really two different kinds of pessimistic 
locking... Envy's system with code ownership (a sort of permanent 
locking), and tools such as SourceSafe/PVCS/etc which only let you lock 
a piece of code temporarily while you're actively working on it, 
there's no "ownership".  Then there are optimistic systems such as CVS 
and Monticello with no locking.

Although Envy was flexible enough that you could use any of the above 
models if you really wanted.  (But with optimistic locking it really 
helps to have some sort of merging capability.)  Anyway, as someone 
who's switched back and forth between pessimistic/optimistic systems, 
I'd say that pessimistic systems are generally inferior. :-)  
(Especially the code ownership model.)

One nice thing about temporary pessimistic locking is that it tells you 
when someone else is working on something.  It seems that this ought to 
be possible with an optimistic system, if you were saving the method 
versions in a central repository as Envy did.  Even though a class 
wasn't "locked", it could tell you that so-and-so has been editing the 
class.

Anyway, I'm not sure if Dan really needs to follow all of these 
Versioning-related discussions... :) it seems like a powerful 
versioning/source code management system could be designed relatively 
separately?  A versioning system only requires that there is a 
packages/modules system which defines/partitions source code.

- Doug




More information about the Squeak-dev mailing list