Panu,

I agree almost completely most of the project dependencies in configuration 
_should_ use a literal version ... I still maintain that there are use cases 
where using symbolic version like #stable is correct.

For example, I have a project called GemTools that depends upon OB being 
present ... I actually do not care which version of OB is loaded, since I am 
_not_ tightly coupled to OB ... I just happen to have several windows that are 
implemented as subclasses of OBBrowser - nothing really fancy, but I want 
GemTools to be usable in Squeak, Pharo1.0, Pharo1.1 and Pharo1.2, etc., etc.

If I am required to specify a specific version of OB to use, then I must become 
an expert about which versions of OB to use on which platform of Pharo or 
Squeak and if a new version of OB is released I have to update _my_ 
configuration to reflect the newly released version ... oh and I have to do 
this whenever a new ob is released for any one of the (5 or 6) different 
platforms that OB runs on ...

If I specify that I want the #stable version of OB, I don't have to worry any 
more and I don't have to keep track of the ins and outs of OB ... 

If GemTools _is_ referencing a #stable version and the hudson server is loading 
GemTools and the tests break because the #stable version of OB has changed and 
introduced a bug, I say ... Hurray for hudson, since a bug has been found with 
the #stable version of OB .

At least the poor developer who loads the #stable version OB won't be the first 
(or only) person to find the bug...

I have proposed the "configuration signature" because I have noticed that some 
developers will change existing/released configurations (which could cause 
problems) and I think that Pharo-1.2 just might be using several versions with 
a #development blessing (where it is an accepted practice to change the 
specification for a version) so any change in version of a configuration mcz 
file is suspect ...

I _have_ been toying with the idea that a Metacello version could include the 
signature of the mcz file, so that one could specify something like the 
following:

  spec project: 'OmniBrowser' with: '1.2.3:dkh.345'.

or 

  spec project: 'OmniBrowser' with: #'stable:dkh.345'

If this is done, then the specification is completely locked down ... of course 
the ':' notion would be optional ...

The problem with locking down the versions of everything is very similar to the 
problem of static definitions of classes (in java) ... one change to a class 
definition and there is a cascade of changes that must be made to the rest of 
the system before you can get the whole thing to compile again....

There _is_ tension between the desire to be able to guarantee reproducable 
results and providing enough wiggle room to avoid putting development into 
version grid lock ... 

With all of that said, there is nothing to prevent a validator rule from being 
written that checks (recursively) for the use of symbolic versions.

But I think the hudson server is actually doing it's job by loading the 
configurations that a developer would be loading and finding problems that a 
developer would otherwise find on his or her own ... the fact that the build 
failed is a good thing and fixing the problem whether it be in a literal 
version or a symbolic version is the important thing...

This _is_ an interesting discussion and I am sure that more can be said (I know 
that _I_ have more to say:) and I hope that it continues...my hope is that we 
find a balance between rigidity and flexibility ... too rigid and progress 
becomes tedious (too many things have to change) too flexible and everything 
spins out of control ... 

Having lots of good tests and running them regularly is one of the things that 
allows for more flexibility and keeps things from spinning out of control, so 
if you are running lots of tests on a complex system that is changing regularly 
... expect the tests to fail and make sure that we have the tools that help us 
identify and resolve the problems as they appear...

Dale

On Mar 23, 2011, at 12:23 PM, Panu Suominen wrote:

> I am quite sure that you already know all of this, but I just have
> urge to make some noice. :)
> 
> In Java world Maven handles this situation using term snapshot
> dependency. Non-snapshot release can/should not contain any snapshot
> dependencies. Contents of snapshot version is expected to change and
> non-snapshot releases are supposed to remain static. To me it looks
> like that these stable & co symbolic versions are quite the same than
> Mavens snapshot versions.
> 
> Thus I think it would make sense have a functionality in metacello to
> "release" a version which would use the exact versions instead of
> symbolic ones. At least there there should be validation agains these
> issues. Possibly it should lock the monticello packages used to load
> the configurations also.
> IMHO it breaks the whole if so called stable version of project A
> depends on some other project which uses some symbolic version of some
> third project. When this third project advances it will eventually
> break the project A and thus the B in between does not seem so stable
> anymore.
> 
> 
> 2011/3/23 Dale Henrichs <[email protected]>:
>> Miguel,
>> 
>> Two things:
>> 
>>  1) there are certain conditions where #stable is the correct version to use
>>  2) I thought the point of running hudson-based tests is to identify these 
>> types
>>      of problems as soon as they occur so that they can be fixed earlier.
>> 
>> With that said, I'd be inclined to create some scripts that recorded the 
>> "configuration signature" of an image, something like the following:
>> 
>>  - Nile 1.2 (GuillermoPolito.19)
>>  - OCompletion 1.2.2 (GuillermePolito.39)
>>  - Pharo 1.1.1 (LaurentLaffonte.148)
>>  - ....
>> 
>> where the parenthesized info is the author and version of the mcz file. So 
>> if an error shows up out of the blue, the first thing would be to check for 
>> changes in the "configuration signature" and go from there ...
>> 
>> We're already doing this kind of thing for the MetacelloBrowser, so it would 
>> be very easy to whip up a script to build the signature ... I guess each 
>> image could keep/generate it's signature....
>> 
>> I think the "configuration signature" is very useful ... if the 
>> "configuration signature" doesn't change the exact same code should be 
>> loaded ...
>> 
>> Dale
>> 
>> 
>> On Mar 23, 2011, at 8:40 AM, Miguel Cobá wrote:
>> 
>>> Maybe we should ask Dale when time permits to add functionality to
>>> Metacello so that can check all the dependencies for a given
>>> configuration and make sure (or raise some warning in the validation)
>>> that some dependency is refered by a symbolic non numeric version (like
>>> #stable, #latestVersion, #bleedingEdge) so that this validation can be
>>> run by hudson also and verify that all the configurations are frozen to
>>> a given number and no dependent on a symbolic version that can change
>>> anytime after release of Pharo when a package get a new (#stable for
>>> example) version.
>>> 
>>> Cheers
>>> 
>>> El mié, 23-03-2011 a las 13:26 +0100, Marcus Denker escribió:
>>>> On Mar 23, 2011, at 12:52 PM, Torsten Bergmann wrote:
>>>> 
>>>>> Pharo 1.2 is red again!
>>>>> 
>>>>> DuplicatedVariableError: stylingActive is already defined in Workspace
>>>>> 
>>>>> https://pharo-ic.lille.inria.fr/hudson/view/Pharo/job/Pharo%201.2/195/
>>>> 
>>>> 
>>>> We really need to make sure that the config does not load code if we don't 
>>>> explicitly say so.
>>>> 
>>>> So what code was changed? Why was it loaded?
>>>> 
>>>> 
>>>> --
>>>> Marcus Denker  -- http://www.marcusdenker.de
>>>> INRIA Lille -- Nord Europe. Team RMoD.
>>>> 
>>>> 
>>> 
>>> --
>>> Miguel Cobá
>>> http://twitter.com/MiguelCobaMtz
>>> http://miguel.leugim.com.mx
>>> 
>>> 
>>> 
>>> 
>> 
>> 
>> 
> 
> 
> 
> -- 
> Panu


Reply via email to