symbolic version proof of concept...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
23 messages Options
12
Reply | Threaded
Open this post in threaded view
|

symbolic version proof of concept...

Dale Henrichs
Over the last few days I've been working on converting
ConfigurationOfOmniBrowser and the configurations it depends upon
(ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
ConfigurationOfOCompletion) to use symbolic versions.

The results are stashed away in a repository on the Bibliocello site:

  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/repository/Experiment1/MetacelloRepository

With Metacello 1.0-beta.28 loaded you can execute the following
expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
the appropriate versions of OmniBrowser and the supporting proejcts
will be loaded:

  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.

So far I have  been using only the 'Tests' group because ... well I
want to verify that the code not only loads, but passes all of the
tests (for the loaded projects) in each image and the results are:

  PharoCore1.0:
    1221 run, 1218 passes, 3 expected failures,
      0 failures, 0 errors, 0 unexpected passes
  PharoCore1.1:
    1325 run, 1324 passes, 1 expected failures,
      0 failures, 0 errors, 0 unexpected passes
  PharoCore1.2:
    814 run, 813 expected passes,
      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
      and deprecation warnings

For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
have been ported to Pharo1.2 yet ...

If you want to look at what I've done you can compare the latest
version of the config with the earliest version of the config in the
repository ... I'll be glad to explain any changes that don't make
sense to you.

All four configs also run clean against the Metacello validator ....

I've developed a set of scripts (in MetacelloToolBox) that I have been
using to automate the process of determining which versions in a
particular configuration load cleanly into an image and if the tests
pass as well (including checking for deprecation warnings). The
following expression when executed in a PharoCore1.0.x image will load
each version in the configuration and run the tests (loading the
'Tests' group if it is defined):

  (MetacelloToolBox
        validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.

Right now, that script will automatically update the development and
stable symbolic version definitions as well as mark versions as
#release if the 'Tests' group loads without errors or deprecation
warnings and passes all of the tests (without deprecation warnings).
It also produces an 'issues list' that describes the individual
errors, critical warnings and warnings for each version ... much like
the validator with added information about tests.

I expect to continue working my way through the various configurations
with the goal to automate as much of the validation and analysis as
possible...

Dale
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Alexandre Bergel-5
Is there a short description of symbolic versions somewhere?

Alexandre


On 24 Nov 2010, at 21:46, Dale wrote:

> Over the last few days I've been working on converting
> ConfigurationOfOmniBrowser and the configurations it depends upon
> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
> ConfigurationOfOCompletion) to use symbolic versions.
>
> The results are stashed away in a repository on the Bibliocello site:
>
>  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/repository/Experiment1/MetacelloRepository
>
> With Metacello 1.0-beta.28 loaded you can execute the following
> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
> the appropriate versions of OmniBrowser and the supporting proejcts
> will be loaded:
>
>  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>
> So far I have  been using only the 'Tests' group because ... well I
> want to verify that the code not only loads, but passes all of the
> tests (for the loaded projects) in each image and the results are:
>
>  PharoCore1.0:
>    1221 run, 1218 passes, 3 expected failures,
>      0 failures, 0 errors, 0 unexpected passes
>  PharoCore1.1:
>    1325 run, 1324 passes, 1 expected failures,
>      0 failures, 0 errors, 0 unexpected passes
>  PharoCore1.2:
>    814 run, 813 expected passes,
>      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>      and deprecation warnings
>
> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
> have been ported to Pharo1.2 yet ...
>
> If you want to look at what I've done you can compare the latest
> version of the config with the earliest version of the config in the
> repository ... I'll be glad to explain any changes that don't make
> sense to you.
>
> All four configs also run clean against the Metacello validator ....
>
> I've developed a set of scripts (in MetacelloToolBox) that I have been
> using to automate the process of determining which versions in a
> particular configuration load cleanly into an image and if the tests
> pass as well (including checking for deprecation warnings). The
> following expression when executed in a PharoCore1.0.x image will load
> each version in the configuration and run the tests (loading the
> 'Tests' group if it is defined):
>
>  (MetacelloToolBox
> validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>
> Right now, that script will automatically update the development and
> stable symbolic version definitions as well as mark versions as
> #release if the 'Tests' group loads without errors or deprecation
> warnings and passes all of the tests (without deprecation warnings).
> It also produces an 'issues list' that describes the individual
> errors, critical warnings and warnings for each version ... much like
> the validator with added information about tests.
>
> I expect to continue working my way through the various configurations
> with the goal to automate as much of the validation and analysis as
> possible...
>
> Dale

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.





Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Tudor Girba
Hi,

I tried:
Gofer new
        url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/repository/Experiment1/MetacelloRepository';
        package: 'ConfigurationOfOmniBrowser';
        load.
 ((Smalltalk at: #ConfigurationOfOmniBrowser) project version: #stable) load: 'Tests'.

But the (ConfigurationOfOmniBrowser project version: #stable) is nil.

Cheers,
Doru


On 25 Nov 2010, at 12:21, Alexandre Bergel wrote:

> Is there a short description of symbolic versions somewhere?
>
> Alexandre
>
>
> On 24 Nov 2010, at 21:46, Dale wrote:
>
>> Over the last few days I've been working on converting
>> ConfigurationOfOmniBrowser and the configurations it depends upon
>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>> ConfigurationOfOCompletion) to use symbolic versions.
>>
>> The results are stashed away in a repository on the Bibliocello site:
>>
>> http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/repository/Experiment1/MetacelloRepository
>>
>> With Metacello 1.0-beta.28 loaded you can execute the following
>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>> the appropriate versions of OmniBrowser and the supporting proejcts
>> will be loaded:
>>
>> (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>
>> So far I have  been using only the 'Tests' group because ... well I
>> want to verify that the code not only loads, but passes all of the
>> tests (for the loaded projects) in each image and the results are:
>>
>> PharoCore1.0:
>>   1221 run, 1218 passes, 3 expected failures,
>>     0 failures, 0 errors, 0 unexpected passes
>> PharoCore1.1:
>>   1325 run, 1324 passes, 1 expected failures,
>>     0 failures, 0 errors, 0 unexpected passes
>> PharoCore1.2:
>>   814 run, 813 expected passes,
>>     0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>     and deprecation warnings
>>
>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>> have been ported to Pharo1.2 yet ...
>>
>> If you want to look at what I've done you can compare the latest
>> version of the config with the earliest version of the config in the
>> repository ... I'll be glad to explain any changes that don't make
>> sense to you.
>>
>> All four configs also run clean against the Metacello validator ....
>>
>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>> using to automate the process of determining which versions in a
>> particular configuration load cleanly into an image and if the tests
>> pass as well (including checking for deprecation warnings). The
>> following expression when executed in a PharoCore1.0.x image will load
>> each version in the configuration and run the tests (loading the
>> 'Tests' group if it is defined):
>>
>> (MetacelloToolBox
>> validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>
>> Right now, that script will automatically update the development and
>> stable symbolic version definitions as well as mark versions as
>> #release if the 'Tests' group loads without errors or deprecation
>> warnings and passes all of the tests (without deprecation warnings).
>> It also produces an 'issues list' that describes the individual
>> errors, critical warnings and warnings for each version ... much like
>> the validator with added information about tests.
>>
>> I expect to continue working my way through the various configurations
>> with the goal to automate as much of the validation and analysis as
>> possible...
>>
>> Dale
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
>

--
www.tudorgirba.com

"In a world where everything is moving ever faster,
one might have better chances to win by moving slower."



Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
Doru,

If you want to try out the load you need to do a couple of things:

  Gofer new
        gemsource: 'metacello';
        package: 'ConfigurationOfMetacello';
        load.

Then:

  (ConfigurationOfMetacello project version: '1.0-beta.28') load.

Followed by:

  Gofer new
        url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/
repository/Experiment1/MetacelloRepository';
        package: 'ConfigurationOfGofer';
        package: 'ConfigurationOfRefactoringBrowser';
        package: 'ConfigurationOfShout';
        package: 'ConfigurationOfOCompletion';
        package: 'ConfigurationOfOmniBrowser';
        load.

That way you've got all of the new configurations preloaded in your
image. And then:

  (ConfigurationOfOmniBrowser project version: #stable) load.

Sorry about not including these instructions in the original message:(

Dale

On Nov 25, 5:10 am, Tudor Girba <[hidden email]> wrote:

> Hi,
>
> I tried:
> Gofer new
>         url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>         package: 'ConfigurationOfOmniBrowser';
>         load.
>  ((Smalltalk at: #ConfigurationOfOmniBrowser) project version: #stable) load: 'Tests'.
>
> But the (ConfigurationOfOmniBrowser project version: #stable) is nil.
>
> Cheers,
> Doru
>
> On 25 Nov 2010, at 12:21, Alexandre Bergel wrote:
>
>
>
> > Is there a short description of symbolic versions somewhere?
>
> > Alexandre
>
> > On 24 Nov 2010, at 21:46, Dale wrote:
>
> >> Over the last few days I've been working on converting
> >> ConfigurationOfOmniBrowser and the configurations it depends upon
> >> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
> >> ConfigurationOfOCompletion) to use symbolic versions.
>
> >> The results are stashed away in a repository on the Bibliocello site:
>
> >>http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>
> >> With Metacello 1.0-beta.28 loaded you can execute the following
> >> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
> >> the appropriate versions of OmniBrowser and the supporting proejcts
> >> will be loaded:
>
> >> (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>
> >> So far I have  been using only the 'Tests' group because ... well I
> >> want to verify that the code not only loads, but passes all of the
> >> tests (for the loaded projects) in each image and the results are:
>
> >> PharoCore1.0:
> >>   1221 run, 1218 passes, 3 expected failures,
> >>     0 failures, 0 errors, 0 unexpected passes
> >> PharoCore1.1:
> >>   1325 run, 1324 passes, 1 expected failures,
> >>     0 failures, 0 errors, 0 unexpected passes
> >> PharoCore1.2:
> >>   814 run, 813 expected passes,
> >>     0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
> >>     and deprecation warnings
>
> >> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
> >> have been ported to Pharo1.2 yet ...
>
> >> If you want to look at what I've done you can compare the latest
> >> version of the config with the earliest version of the config in the
> >> repository ... I'll be glad to explain any changes that don't make
> >> sense to you.
>
> >> All four configs also run clean against the Metacello validator ....
>
> >> I've developed a set of scripts (in MetacelloToolBox) that I have been
> >> using to automate the process of determining which versions in a
> >> particular configuration load cleanly into an image and if the tests
> >> pass as well (including checking for deprecation warnings). The
> >> following expression when executed in a PharoCore1.0.x image will load
> >> each version in the configuration and run the tests (loading the
> >> 'Tests' group if it is defined):
>
> >> (MetacelloToolBox
> >>        validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>
> >> Right now, that script will automatically update the development and
> >> stable symbolic version definitions as well as mark versions as
> >> #release if the 'Tests' group loads without errors or deprecation
> >> warnings and passes all of the tests (without deprecation warnings).
> >> It also produces an 'issues list' that describes the individual
> >> errors, critical warnings and warnings for each version ... much like
> >> the validator with added information about tests.
>
> >> I expect to continue working my way through the various configurations
> >> with the goal to automate as much of the validation and analysis as
> >> possible...
>
> >> Dale
>
> > --
> > _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> > Alexandre Bergel  http://www.bergel.eu
> > ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
> --www.tudorgirba.com
>
> "In a world where everything is moving ever faster,
> one might have better chances to win by moving slower."
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
In reply to this post by Alexandre Bergel-5
Alexandre,

Not yet ... I'm still expecting to tweak a thing or two with symbolic
versions, but I can take a crack at a short description of what I've
got so far.

From the beginning Metacello has had the notion of loading the latest
version. The expectation was that loading the latest release would
always be the best thing to do.

As Pharo has moved forward, aggressively cleaning up the base image,
it has turned out that loading the latest version isn't always the
best solution:

  - code that runs in Pharo1.0 won't work in Pharo1.2 and vice versa

To solve this problem we need to be able to describe the 'latest
version' on a platform by platform basis.

'latest version' is only one of the dimensions that we're interested
in. At this point in time, there are really three version dimensions
that are interesting:

  bleedingEdge - the latest mcz file defined in the latest baseline
for a
                        project.
  development - the currently active development version
  stable           - what we really want when we say 'latest version'

I expect that over time there will be additional dimensions over time.
For Metacello I've already played with #earlyAccess versions which are
'stable' development versions.

The requirement is to be able to declare a #stable or #development
version on a platform by platform basis. So we've added an two
additional pragmas that can be included in Configuration class
methods:

  <symbolicVersion: SYMBOLIC_VERSION_SYMBOL>
  <defaultSymbolicVersion: SYMBOLIC_VERSION_SYMBOL>

The #symbolicVersion: pragma is similar to the version pragma
(<version: VERSION_STRING>). The following is an example where a set
of #stable symbolic versions are declared:

  stable: spec
        <symbolicVersion: #'stable'>

        spec for: #'common' version: '1.0.2.1'.
        spec for: #'pharo1.0.x' version: '1.0.2.1'.
        spec for: #'pharo1.1.x' version: '1.0.3'.
        spec for: #'pharo1.2.x' version: '1.0.4'.

The #defaultSymbolicVersion: is used in a method that is expected to
be regular smalltalk code that returns a version string. The following
is the definition for the #bleedingEdge symbolic version:

  bleedingEdge
        <defaultSymbolicVersion: #bleedingEdge>

        | bleedingEdgeVersion |
        bleedingEdgeVersion := (self project map values select: [ :version |
version blessing == #baseline ])
                detectMax: [ :version | version ].
        bleedingEdgeVersion ifNil: [ bleedingEdgeVersion := self project
latestVersion ].
        bleedingEdgeVersion
                ifNil: [ self versionDoesNotExistError: #bleedingEdge ].
        ^ bleedingEdgeVersion versionString

When specifying a symbolic version with a #symbolicVersion: pragma it
is legal to use another symbolic version like the following definition
for the symbolic version #stable:

  stable: spec
        <symbolicVersion: #'stable'>

        spec for: #'gemstone' version: '1.5'.
        spec for: #'squeak' version: '1.4'.
        spec for: #'pharo1.0.x' version: '1.5'.
        spec for: #'pharo1.1.x' version: '1.5'.
        spec for: #'pharo1.2.x' version: #development.

Or to use the special symbolic version #notDefined: as in the
following definition of the symbolic version #development:

  development: spec
        <symbolicVersion: #'development'>

        spec for: #'common' version: #notDefined.
        spec for: #'pharo1.1.x' version: '1.6'.
        spec for: #'pharo1.2.x' version: '1.6'.

Using a symbolic version that resolves to #notDefined will result in a
MetacelloSymbolicVersionNotDefinedError being signalled.

A symbolic version may be used anywhere that a literal version may be
used.

Well, this should cover the basics...

Dale

On Nov 25, 3:21 am, Alexandre Bergel <[hidden email]> wrote:

> Is there a short description of symbolic versions somewhere?
>
> Alexandre
>
> On 24 Nov 2010, at 21:46, Dale wrote:
>
>
>
> > Over the last few days I've been working on converting
> > ConfigurationOfOmniBrowser and the configurations it depends upon
> > (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
> > ConfigurationOfOCompletion) to use symbolic versions.
>
> > The results are stashed away in a repository on the Bibliocello site:
>
> >  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>
> > With Metacello 1.0-beta.28 loaded you can execute the following
> > expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
> > the appropriate versions of OmniBrowser and the supporting proejcts
> > will be loaded:
>
> >  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>
> > So far I have  been using only the 'Tests' group because ... well I
> > want to verify that the code not only loads, but passes all of the
> > tests (for the loaded projects) in each image and the results are:
>
> >  PharoCore1.0:
> >    1221 run, 1218 passes, 3 expected failures,
> >      0 failures, 0 errors, 0 unexpected passes
> >  PharoCore1.1:
> >    1325 run, 1324 passes, 1 expected failures,
> >      0 failures, 0 errors, 0 unexpected passes
> >  PharoCore1.2:
> >    814 run, 813 expected passes,
> >      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
> >      and deprecation warnings
>
> > For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
> > have been ported to Pharo1.2 yet ...
>
> > If you want to look at what I've done you can compare the latest
> > version of the config with the earliest version of the config in the
> > repository ... I'll be glad to explain any changes that don't make
> > sense to you.
>
> > All four configs also run clean against the Metacello validator ....
>
> > I've developed a set of scripts (in MetacelloToolBox) that I have been
> > using to automate the process of determining which versions in a
> > particular configuration load cleanly into an image and if the tests
> > pass as well (including checking for deprecation warnings). The
> > following expression when executed in a PharoCore1.0.x image will load
> > each version in the configuration and run the tests (loading the
> > 'Tests' group if it is defined):
>
> >  (MetacelloToolBox
> >    validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>
> > Right now, that script will automatically update the development and
> > stable symbolic version definitions as well as mark versions as
> > #release if the 'Tests' group loads without errors or deprecation
> > warnings and passes all of the tests (without deprecation warnings).
> > It also produces an 'issues list' that describes the individual
> > errors, critical warnings and warnings for each version ... much like
> > the validator with added information about tests.
>
> > I expect to continue working my way through the various configurations
> > with the goal to automate as much of the validation and analysis as
> > possible...
>
> > Dale
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Alexandre Bergel-5
Ok. But why not simply having
ConfigurationOfMondrian class >> loadForPharo12
  (self project version: 'default') load

ConfigurationOfMondrian loadForPharo111
  (self project version: '2.1.2') load

?

Alexandre

On 25 Nov 2010, at 13:44, Dale wrote:

> Alexandre,
>
> Not yet ... I'm still expecting to tweak a thing or two with symbolic
> versions, but I can take a crack at a short description of what I've
> got so far.
>
> From the beginning Metacello has had the notion of loading the latest
> version. The expectation was that loading the latest release would
> always be the best thing to do.
>
> As Pharo has moved forward, aggressively cleaning up the base image,
> it has turned out that loading the latest version isn't always the
> best solution:
>
>  - code that runs in Pharo1.0 won't work in Pharo1.2 and vice versa
>
> To solve this problem we need to be able to describe the 'latest
> version' on a platform by platform basis.
>
> 'latest version' is only one of the dimensions that we're interested
> in. At this point in time, there are really three version dimensions
> that are interesting:
>
>  bleedingEdge - the latest mcz file defined in the latest baseline
> for a
>                        project.
>  development - the currently active development version
>  stable           - what we really want when we say 'latest version'
>
> I expect that over time there will be additional dimensions over time.
> For Metacello I've already played with #earlyAccess versions which are
> 'stable' development versions.
>
> The requirement is to be able to declare a #stable or #development
> version on a platform by platform basis. So we've added an two
> additional pragmas that can be included in Configuration class
> methods:
>
>  <symbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>  <defaultSymbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>
> The #symbolicVersion: pragma is similar to the version pragma
> (<version: VERSION_STRING>). The following is an example where a set
> of #stable symbolic versions are declared:
>
>  stable: spec
> <symbolicVersion: #'stable'>
>
> spec for: #'common' version: '1.0.2.1'.
> spec for: #'pharo1.0.x' version: '1.0.2.1'.
> spec for: #'pharo1.1.x' version: '1.0.3'.
> spec for: #'pharo1.2.x' version: '1.0.4'.
>
> The #defaultSymbolicVersion: is used in a method that is expected to
> be regular smalltalk code that returns a version string. The following
> is the definition for the #bleedingEdge symbolic version:
>
>  bleedingEdge
> <defaultSymbolicVersion: #bleedingEdge>
>
> | bleedingEdgeVersion |
> bleedingEdgeVersion := (self project map values select: [ :version |
> version blessing == #baseline ])
> detectMax: [ :version | version ].
> bleedingEdgeVersion ifNil: [ bleedingEdgeVersion := self project
> latestVersion ].
> bleedingEdgeVersion
> ifNil: [ self versionDoesNotExistError: #bleedingEdge ].
> ^ bleedingEdgeVersion versionString
>
> When specifying a symbolic version with a #symbolicVersion: pragma it
> is legal to use another symbolic version like the following definition
> for the symbolic version #stable:
>
>  stable: spec
> <symbolicVersion: #'stable'>
>
> spec for: #'gemstone' version: '1.5'.
> spec for: #'squeak' version: '1.4'.
> spec for: #'pharo1.0.x' version: '1.5'.
> spec for: #'pharo1.1.x' version: '1.5'.
> spec for: #'pharo1.2.x' version: #development.
>
> Or to use the special symbolic version #notDefined: as in the
> following definition of the symbolic version #development:
>
>  development: spec
> <symbolicVersion: #'development'>
>
> spec for: #'common' version: #notDefined.
> spec for: #'pharo1.1.x' version: '1.6'.
> spec for: #'pharo1.2.x' version: '1.6'.
>
> Using a symbolic version that resolves to #notDefined will result in a
> MetacelloSymbolicVersionNotDefinedError being signalled.
>
> A symbolic version may be used anywhere that a literal version may be
> used.
>
> Well, this should cover the basics...
>
> Dale
>
> On Nov 25, 3:21 am, Alexandre Bergel <[hidden email]> wrote:
>> Is there a short description of symbolic versions somewhere?
>>
>> Alexandre
>>
>> On 24 Nov 2010, at 21:46, Dale wrote:
>>
>>
>>
>>> Over the last few days I've been working on converting
>>> ConfigurationOfOmniBrowser and the configurations it depends upon
>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>>> ConfigurationOfOCompletion) to use symbolic versions.
>>
>>> The results are stashed away in a repository on the Bibliocello site:
>>
>>>  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>
>>> With Metacello 1.0-beta.28 loaded you can execute the following
>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>>> the appropriate versions of OmniBrowser and the supporting proejcts
>>> will be loaded:
>>
>>>  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>
>>> So far I have  been using only the 'Tests' group because ... well I
>>> want to verify that the code not only loads, but passes all of the
>>> tests (for the loaded projects) in each image and the results are:
>>
>>>  PharoCore1.0:
>>>    1221 run, 1218 passes, 3 expected failures,
>>>      0 failures, 0 errors, 0 unexpected passes
>>>  PharoCore1.1:
>>>    1325 run, 1324 passes, 1 expected failures,
>>>      0 failures, 0 errors, 0 unexpected passes
>>>  PharoCore1.2:
>>>    814 run, 813 expected passes,
>>>      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>>      and deprecation warnings
>>
>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>>> have been ported to Pharo1.2 yet ...
>>
>>> If you want to look at what I've done you can compare the latest
>>> version of the config with the earliest version of the config in the
>>> repository ... I'll be glad to explain any changes that don't make
>>> sense to you.
>>
>>> All four configs also run clean against the Metacello validator ....
>>
>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>>> using to automate the process of determining which versions in a
>>> particular configuration load cleanly into an image and if the tests
>>> pass as well (including checking for deprecation warnings). The
>>> following expression when executed in a PharoCore1.0.x image will load
>>> each version in the configuration and run the tests (loading the
>>> 'Tests' group if it is defined):
>>
>>>  (MetacelloToolBox
>>>    validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>
>>> Right now, that script will automatically update the development and
>>> stable symbolic version definitions as well as mark versions as
>>> #release if the 'Tests' group loads without errors or deprecation
>>> warnings and passes all of the tests (without deprecation warnings).
>>> It also produces an 'issues list' that describes the individual
>>> errors, critical warnings and warnings for each version ... much like
>>> the validator with added information about tests.
>>
>>> I expect to continue working my way through the various configurations
>>> with the goal to automate as much of the validation and analysis as
>>> possible...
>>
>>> Dale
>>
>> --
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel  http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.





Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
Alexandre,

What you are suggesting is that there would need to be multiple mappings
for the versions 'default' and '2.1.2'...

the problem that we have right now is that '2.1.2' doesn't work in
Pharo1.0 (but version '1.2' does), but works in Pharo1.2 (for example).

So we have _different_ versions that apply to different platforms so the
solution is to allow a developer to map a version to a platform...

With symbolic versions we still have multiple mappings for the symbolic
version, but they are intended from the outset to have multiple mappings
and the different is clear.

Dale


On 11/25/2010 12:23 PM, Alexandre Bergel wrote:

> Ok. But why not simply having
> ConfigurationOfMondrian class>>  loadForPharo12
>    (self project version: 'default') load
>
> ConfigurationOfMondrian loadForPharo111
>    (self project version: '2.1.2') load
>
> ?
>
> Alexandre
>
> On 25 Nov 2010, at 13:44, Dale wrote:
>
>> Alexandre,
>>
>> Not yet ... I'm still expecting to tweak a thing or two with symbolic
>> versions, but I can take a crack at a short description of what I've
>> got so far.
>>
>>  From the beginning Metacello has had the notion of loading the latest
>> version. The expectation was that loading the latest release would
>> always be the best thing to do.
>>
>> As Pharo has moved forward, aggressively cleaning up the base image,
>> it has turned out that loading the latest version isn't always the
>> best solution:
>>
>>   - code that runs in Pharo1.0 won't work in Pharo1.2 and vice versa
>>
>> To solve this problem we need to be able to describe the 'latest
>> version' on a platform by platform basis.
>>
>> 'latest version' is only one of the dimensions that we're interested
>> in. At this point in time, there are really three version dimensions
>> that are interesting:
>>
>>   bleedingEdge - the latest mcz file defined in the latest baseline
>> for a
>>                         project.
>>   development - the currently active development version
>>   stable           - what we really want when we say 'latest version'
>>
>> I expect that over time there will be additional dimensions over time.
>> For Metacello I've already played with #earlyAccess versions which are
>> 'stable' development versions.
>>
>> The requirement is to be able to declare a #stable or #development
>> version on a platform by platform basis. So we've added an two
>> additional pragmas that can be included in Configuration class
>> methods:
>>
>>   <symbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>>   <defaultSymbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>>
>> The #symbolicVersion: pragma is similar to the version pragma
>> (<version: VERSION_STRING>). The following is an example where a set
>> of #stable symbolic versions are declared:
>>
>>   stable: spec
>>        <symbolicVersion: #'stable'>
>>
>>        spec for: #'common' version: '1.0.2.1'.
>>        spec for: #'pharo1.0.x' version: '1.0.2.1'.
>>        spec for: #'pharo1.1.x' version: '1.0.3'.
>>        spec for: #'pharo1.2.x' version: '1.0.4'.
>>
>> The #defaultSymbolicVersion: is used in a method that is expected to
>> be regular smalltalk code that returns a version string. The following
>> is the definition for the #bleedingEdge symbolic version:
>>
>>   bleedingEdge
>>        <defaultSymbolicVersion: #bleedingEdge>
>>
>>        | bleedingEdgeVersion |
>>        bleedingEdgeVersion := (self project map values select: [ :version |
>> version blessing == #baseline ])
>>                detectMax: [ :version | version ].
>>        bleedingEdgeVersion ifNil: [ bleedingEdgeVersion := self project
>> latestVersion ].
>>        bleedingEdgeVersion
>>                ifNil: [ self versionDoesNotExistError: #bleedingEdge ].
>>        ^ bleedingEdgeVersion versionString
>>
>> When specifying a symbolic version with a #symbolicVersion: pragma it
>> is legal to use another symbolic version like the following definition
>> for the symbolic version #stable:
>>
>>   stable: spec
>>        <symbolicVersion: #'stable'>
>>
>>        spec for: #'gemstone' version: '1.5'.
>>        spec for: #'squeak' version: '1.4'.
>>        spec for: #'pharo1.0.x' version: '1.5'.
>>        spec for: #'pharo1.1.x' version: '1.5'.
>>        spec for: #'pharo1.2.x' version: #development.
>>
>> Or to use the special symbolic version #notDefined: as in the
>> following definition of the symbolic version #development:
>>
>>   development: spec
>>        <symbolicVersion: #'development'>
>>
>>        spec for: #'common' version: #notDefined.
>>        spec for: #'pharo1.1.x' version: '1.6'.
>>        spec for: #'pharo1.2.x' version: '1.6'.
>>
>> Using a symbolic version that resolves to #notDefined will result in a
>> MetacelloSymbolicVersionNotDefinedError being signalled.
>>
>> A symbolic version may be used anywhere that a literal version may be
>> used.
>>
>> Well, this should cover the basics...
>>
>> Dale
>>
>> On Nov 25, 3:21 am, Alexandre Bergel<[hidden email]>  wrote:
>>> Is there a short description of symbolic versions somewhere?
>>>
>>> Alexandre
>>>
>>> On 24 Nov 2010, at 21:46, Dale wrote:
>>>
>>>
>>>
>>>> Over the last few days I've been working on converting
>>>> ConfigurationOfOmniBrowser and the configurations it depends upon
>>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>>>> ConfigurationOfOCompletion) to use symbolic versions.
>>>
>>>> The results are stashed away in a repository on the Bibliocello site:
>>>
>>>>   http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>>
>>>> With Metacello 1.0-beta.28 loaded you can execute the following
>>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>>>> the appropriate versions of OmniBrowser and the supporting proejcts
>>>> will be loaded:
>>>
>>>>   (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>>
>>>> So far I have  been using only the 'Tests' group because ... well I
>>>> want to verify that the code not only loads, but passes all of the
>>>> tests (for the loaded projects) in each image and the results are:
>>>
>>>>   PharoCore1.0:
>>>>     1221 run, 1218 passes, 3 expected failures,
>>>>       0 failures, 0 errors, 0 unexpected passes
>>>>   PharoCore1.1:
>>>>     1325 run, 1324 passes, 1 expected failures,
>>>>       0 failures, 0 errors, 0 unexpected passes
>>>>   PharoCore1.2:
>>>>     814 run, 813 expected passes,
>>>>       0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>>>       and deprecation warnings
>>>
>>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>>>> have been ported to Pharo1.2 yet ...
>>>
>>>> If you want to look at what I've done you can compare the latest
>>>> version of the config with the earliest version of the config in the
>>>> repository ... I'll be glad to explain any changes that don't make
>>>> sense to you.
>>>
>>>> All four configs also run clean against the Metacello validator ....
>>>
>>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>>>> using to automate the process of determining which versions in a
>>>> particular configuration load cleanly into an image and if the tests
>>>> pass as well (including checking for deprecation warnings). The
>>>> following expression when executed in a PharoCore1.0.x image will load
>>>> each version in the configuration and run the tests (loading the
>>>> 'Tests' group if it is defined):
>>>
>>>>   (MetacelloToolBox
>>>>     validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>>
>>>> Right now, that script will automatically update the development and
>>>> stable symbolic version definitions as well as mark versions as
>>>> #release if the 'Tests' group loads without errors or deprecation
>>>> warnings and passes all of the tests (without deprecation warnings).
>>>> It also produces an 'issues list' that describes the individual
>>>> errors, critical warnings and warnings for each version ... much like
>>>> the validator with added information about tests.
>>>
>>>> I expect to continue working my way through the various configurations
>>>> with the goal to automate as much of the validation and analysis as
>>>> possible...
>>>
>>>> Dale
>>>
>>> --
>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>> Alexandre Bergel  http://www.bergel.eu
>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Alexandre Bergel-5
Are you suggesting that we may have two 2.1.2 versions, each for a particular platform? I feel I can get easily confused with that :-)

Cheers,
Alexandre


On 25 Nov 2010, at 17:46, Dale Henrichs wrote:

> Alexandre,
>
> What you are suggesting is that there would need to be multiple mappings for the versions 'default' and '2.1.2'...
>
> the problem that we have right now is that '2.1.2' doesn't work in Pharo1.0 (but version '1.2' does), but works in Pharo1.2 (for example).
>
> So we have _different_ versions that apply to different platforms so the solution is to allow a developer to map a version to a platform...
>
> With symbolic versions we still have multiple mappings for the symbolic version, but they are intended from the outset to have multiple mappings and the different is clear.
>
> Dale
>
>
> On 11/25/2010 12:23 PM, Alexandre Bergel wrote:
>> Ok. But why not simply having
>> ConfigurationOfMondrian class>>  loadForPharo12
>>   (self project version: 'default') load
>>
>> ConfigurationOfMondrian loadForPharo111
>>   (self project version: '2.1.2') load
>>
>> ?
>>
>> Alexandre
>>
>> On 25 Nov 2010, at 13:44, Dale wrote:
>>
>>> Alexandre,
>>>
>>> Not yet ... I'm still expecting to tweak a thing or two with symbolic
>>> versions, but I can take a crack at a short description of what I've
>>> got so far.
>>>
>>> From the beginning Metacello has had the notion of loading the latest
>>> version. The expectation was that loading the latest release would
>>> always be the best thing to do.
>>>
>>> As Pharo has moved forward, aggressively cleaning up the base image,
>>> it has turned out that loading the latest version isn't always the
>>> best solution:
>>>
>>>  - code that runs in Pharo1.0 won't work in Pharo1.2 and vice versa
>>>
>>> To solve this problem we need to be able to describe the 'latest
>>> version' on a platform by platform basis.
>>>
>>> 'latest version' is only one of the dimensions that we're interested
>>> in. At this point in time, there are really three version dimensions
>>> that are interesting:
>>>
>>>  bleedingEdge - the latest mcz file defined in the latest baseline
>>> for a
>>>                        project.
>>>  development - the currently active development version
>>>  stable           - what we really want when we say 'latest version'
>>>
>>> I expect that over time there will be additional dimensions over time.
>>> For Metacello I've already played with #earlyAccess versions which are
>>> 'stable' development versions.
>>>
>>> The requirement is to be able to declare a #stable or #development
>>> version on a platform by platform basis. So we've added an two
>>> additional pragmas that can be included in Configuration class
>>> methods:
>>>
>>>  <symbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>>>  <defaultSymbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>>>
>>> The #symbolicVersion: pragma is similar to the version pragma
>>> (<version: VERSION_STRING>). The following is an example where a set
>>> of #stable symbolic versions are declared:
>>>
>>>  stable: spec
>>>       <symbolicVersion: #'stable'>
>>>
>>>       spec for: #'common' version: '1.0.2.1'.
>>>       spec for: #'pharo1.0.x' version: '1.0.2.1'.
>>>       spec for: #'pharo1.1.x' version: '1.0.3'.
>>>       spec for: #'pharo1.2.x' version: '1.0.4'.
>>>
>>> The #defaultSymbolicVersion: is used in a method that is expected to
>>> be regular smalltalk code that returns a version string. The following
>>> is the definition for the #bleedingEdge symbolic version:
>>>
>>>  bleedingEdge
>>>       <defaultSymbolicVersion: #bleedingEdge>
>>>
>>>       | bleedingEdgeVersion |
>>>       bleedingEdgeVersion := (self project map values select: [ :version |
>>> version blessing == #baseline ])
>>>               detectMax: [ :version | version ].
>>>       bleedingEdgeVersion ifNil: [ bleedingEdgeVersion := self project
>>> latestVersion ].
>>>       bleedingEdgeVersion
>>>               ifNil: [ self versionDoesNotExistError: #bleedingEdge ].
>>>       ^ bleedingEdgeVersion versionString
>>>
>>> When specifying a symbolic version with a #symbolicVersion: pragma it
>>> is legal to use another symbolic version like the following definition
>>> for the symbolic version #stable:
>>>
>>>  stable: spec
>>>       <symbolicVersion: #'stable'>
>>>
>>>       spec for: #'gemstone' version: '1.5'.
>>>       spec for: #'squeak' version: '1.4'.
>>>       spec for: #'pharo1.0.x' version: '1.5'.
>>>       spec for: #'pharo1.1.x' version: '1.5'.
>>>       spec for: #'pharo1.2.x' version: #development.
>>>
>>> Or to use the special symbolic version #notDefined: as in the
>>> following definition of the symbolic version #development:
>>>
>>>  development: spec
>>>       <symbolicVersion: #'development'>
>>>
>>>       spec for: #'common' version: #notDefined.
>>>       spec for: #'pharo1.1.x' version: '1.6'.
>>>       spec for: #'pharo1.2.x' version: '1.6'.
>>>
>>> Using a symbolic version that resolves to #notDefined will result in a
>>> MetacelloSymbolicVersionNotDefinedError being signalled.
>>>
>>> A symbolic version may be used anywhere that a literal version may be
>>> used.
>>>
>>> Well, this should cover the basics...
>>>
>>> Dale
>>>
>>> On Nov 25, 3:21 am, Alexandre Bergel<[hidden email]>  wrote:
>>>> Is there a short description of symbolic versions somewhere?
>>>>
>>>> Alexandre
>>>>
>>>> On 24 Nov 2010, at 21:46, Dale wrote:
>>>>
>>>>
>>>>
>>>>> Over the last few days I've been working on converting
>>>>> ConfigurationOfOmniBrowser and the configurations it depends upon
>>>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>>>>> ConfigurationOfOCompletion) to use symbolic versions.
>>>>
>>>>> The results are stashed away in a repository on the Bibliocello site:
>>>>
>>>>>  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>>>
>>>>> With Metacello 1.0-beta.28 loaded you can execute the following
>>>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>>>>> the appropriate versions of OmniBrowser and the supporting proejcts
>>>>> will be loaded:
>>>>
>>>>>  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>>>
>>>>> So far I have  been using only the 'Tests' group because ... well I
>>>>> want to verify that the code not only loads, but passes all of the
>>>>> tests (for the loaded projects) in each image and the results are:
>>>>
>>>>>  PharoCore1.0:
>>>>>    1221 run, 1218 passes, 3 expected failures,
>>>>>      0 failures, 0 errors, 0 unexpected passes
>>>>>  PharoCore1.1:
>>>>>    1325 run, 1324 passes, 1 expected failures,
>>>>>      0 failures, 0 errors, 0 unexpected passes
>>>>>  PharoCore1.2:
>>>>>    814 run, 813 expected passes,
>>>>>      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>>>>      and deprecation warnings
>>>>
>>>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>>>>> have been ported to Pharo1.2 yet ...
>>>>
>>>>> If you want to look at what I've done you can compare the latest
>>>>> version of the config with the earliest version of the config in the
>>>>> repository ... I'll be glad to explain any changes that don't make
>>>>> sense to you.
>>>>
>>>>> All four configs also run clean against the Metacello validator ....
>>>>
>>>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>>>>> using to automate the process of determining which versions in a
>>>>> particular configuration load cleanly into an image and if the tests
>>>>> pass as well (including checking for deprecation warnings). The
>>>>> following expression when executed in a PharoCore1.0.x image will load
>>>>> each version in the configuration and run the tests (loading the
>>>>> 'Tests' group if it is defined):
>>>>
>>>>>  (MetacelloToolBox
>>>>>    validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>>>
>>>>> Right now, that script will automatically update the development and
>>>>> stable symbolic version definitions as well as mark versions as
>>>>> #release if the 'Tests' group loads without errors or deprecation
>>>>> warnings and passes all of the tests (without deprecation warnings).
>>>>> It also produces an 'issues list' that describes the individual
>>>>> errors, critical warnings and warnings for each version ... much like
>>>>> the validator with added information about tests.
>>>>
>>>>> I expect to continue working my way through the various configurations
>>>>> with the goal to automate as much of the validation and analysis as
>>>>> possible...
>>>>
>>>>> Dale
>>>>
>>>> --
>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>> Alexandre Bergel  http://www.bergel.eu
>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>> --
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel  http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>>
>>
>>
>>

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.





Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
I am not suggesting that. What you are proposing implies that there
are two 2.1.2 versions.

I am suggesting that by using symbolic versions you can specify that:

  version 1.2 is the stable version for Pharo1.0
  version 2.1.2 is the stable version for Pharo1.2

by loading the #stable version the correct version will be loaded
based upon the platform you are loading on ...

An additional advantage of symbolic versions is that a project
reference can specify a symbolic version.

For example, certain packages in Seaside30 depend upon OmniBrowser.
Seaside30 itself has been written so that version 3.0.2 loads into
Pharo1.0 and Pharo1.2 correctly.  There is no single version of
OmniBrowser that loads correctly into both Pharo1.0 and Pharo1.2,
which creates a bit of a problem for Seaside 30 users.

With symbolic versions it is possible to specify that the #stable
version of OmniBrowser be loaded by Seaside30. In so doing the correct
(stable) version of OmniBrowser will be loaded by Seaside30 for the
platform into which Seaside30 is being loaded ... there is no need to
Seaside30 to worry about which platforms may be involved ... all that
needs to be specified is that the #stable version be loaded.

Dale


On Nov 25, 1:24 pm, Alexandre Bergel <[hidden email]> wrote:

> Are you suggesting that we may have two 2.1.2 versions, each for a particular platform? I feel I can get easily confused with that :-)
>
> Cheers,
> Alexandre
>
> On 25 Nov 2010, at 17:46, Dale Henrichs wrote:
>
>
>
> > Alexandre,
>
> > What you are suggesting is that there would need to be multiple mappings for the versions 'default' and '2.1.2'...
>
> > the problem that we have right now is that '2.1.2' doesn't work in Pharo1.0 (but version '1.2' does), but works in Pharo1.2 (for example).
>
> > So we have _different_ versions that apply to different platforms so the solution is to allow a developer to map a version to a platform...
>
> > With symbolic versions we still have multiple mappings for the symbolic version, but they are intended from the outset to have multiple mappings and the different is clear.
>
> > Dale
>
> > On 11/25/2010 12:23 PM, Alexandre Bergel wrote:
> >> Ok. But why not simply having
> >> ConfigurationOfMondrian class>>  loadForPharo12
> >>   (self project version: 'default') load
>
> >> ConfigurationOfMondrian loadForPharo111
> >>   (self project version: '2.1.2') load
>
> >> ?
>
> >> Alexandre
>
> >> On 25 Nov 2010, at 13:44, Dale wrote:
>
> >>> Alexandre,
>
> >>> Not yet ... I'm still expecting to tweak a thing or two with symbolic
> >>> versions, but I can take a crack at a short description of what I've
> >>> got so far.
>
> >>> From the beginning Metacello has had the notion of loading the latest
> >>> version. The expectation was that loading the latest release would
> >>> always be the best thing to do.
>
> >>> As Pharo has moved forward, aggressively cleaning up the base image,
> >>> it has turned out that loading the latest version isn't always the
> >>> best solution:
>
> >>>  - code that runs in Pharo1.0 won't work in Pharo1.2 and vice versa
>
> >>> To solve this problem we need to be able to describe the 'latest
> >>> version' on a platform by platform basis.
>
> >>> 'latest version' is only one of the dimensions that we're interested
> >>> in. At this point in time, there are really three version dimensions
> >>> that are interesting:
>
> >>>  bleedingEdge - the latest mcz file defined in the latest baseline
> >>> for a
> >>>                        project.
> >>>  development - the currently active development version
> >>>  stable           - what we really want when we say 'latest version'
>
> >>> I expect that over time there will be additional dimensions over time.
> >>> For Metacello I've already played with #earlyAccess versions which are
> >>> 'stable' development versions.
>
> >>> The requirement is to be able to declare a #stable or #development
> >>> version on a platform by platform basis. So we've added an two
> >>> additional pragmas that can be included in Configuration class
> >>> methods:
>
> >>>  <symbolicVersion: SYMBOLIC_VERSION_SYMBOL>
> >>>  <defaultSymbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>
> >>> The #symbolicVersion: pragma is similar to the version pragma
> >>> (<version: VERSION_STRING>). The following is an example where a set
> >>> of #stable symbolic versions are declared:
>
> >>>  stable: spec
> >>>       <symbolicVersion: #'stable'>
>
> >>>       spec for: #'common' version: '1.0.2.1'.
> >>>       spec for: #'pharo1.0.x' version: '1.0.2.1'.
> >>>       spec for: #'pharo1.1.x' version: '1.0.3'.
> >>>       spec for: #'pharo1.2.x' version: '1.0.4'.
>
> >>> The #defaultSymbolicVersion: is used in a method that is expected to
> >>> be regular smalltalk code that returns a version string. The following
> >>> is the definition for the #bleedingEdge symbolic version:
>
> >>>  bleedingEdge
> >>>       <defaultSymbolicVersion: #bleedingEdge>
>
> >>>       | bleedingEdgeVersion |
> >>>       bleedingEdgeVersion := (self project map values select: [ :version |
> >>> version blessing == #baseline ])
> >>>               detectMax: [ :version | version ].
> >>>       bleedingEdgeVersion ifNil: [ bleedingEdgeVersion := self project
> >>> latestVersion ].
> >>>       bleedingEdgeVersion
> >>>               ifNil: [ self versionDoesNotExistError: #bleedingEdge ].
> >>>       ^ bleedingEdgeVersion versionString
>
> >>> When specifying a symbolic version with a #symbolicVersion: pragma it
> >>> is legal to use another symbolic version like the following definition
> >>> for the symbolic version #stable:
>
> >>>  stable: spec
> >>>       <symbolicVersion: #'stable'>
>
> >>>       spec for: #'gemstone' version: '1.5'.
> >>>       spec for: #'squeak' version: '1.4'.
> >>>       spec for: #'pharo1.0.x' version: '1.5'.
> >>>       spec for: #'pharo1.1.x' version: '1.5'.
> >>>       spec for: #'pharo1.2.x' version: #development.
>
> >>> Or to use the special symbolic version #notDefined: as in the
> >>> following definition of the symbolic version #development:
>
> >>>  development: spec
> >>>       <symbolicVersion: #'development'>
>
> >>>       spec for: #'common' version: #notDefined.
> >>>       spec for: #'pharo1.1.x' version: '1.6'.
> >>>       spec for: #'pharo1.2.x' version: '1.6'.
>
> >>> Using a symbolic version that resolves to #notDefined will result in a
> >>> MetacelloSymbolicVersionNotDefinedError being signalled.
>
> >>> A symbolic version may be used anywhere that a literal version may be
> >>> used.
>
> >>> Well, this should cover the basics...
>
> >>> Dale
>
> >>> On Nov 25, 3:21 am, Alexandre Bergel<[hidden email]>  wrote:
> >>>> Is there a short description of symbolic versions somewhere?
>
> >>>> Alexandre
>
> >>>> On 24 Nov 2010, at 21:46, Dale wrote:
>
> >>>>> Over the last few days I've been working on converting
> >>>>> ConfigurationOfOmniBrowser and the configurations it depends upon
> >>>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
> >>>>> ConfigurationOfOCompletion) to use symbolic versions.
>
> >>>>> The results are stashed away in a repository on the Bibliocello site:
>
> >>>>>  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>
> >>>>> With Metacello 1.0-beta.28 loaded you can execute the following
> >>>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
> >>>>> the appropriate versions of OmniBrowser and the supporting proejcts
> >>>>> will be loaded:
>
> >>>>>  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>
> >>>>> So far I have  been using only the 'Tests' group because ... well I
> >>>>> want to verify that the code not only loads, but passes all of the
> >>>>> tests (for the loaded projects) in each image and the results are:
>
> >>>>>  PharoCore1.0:
> >>>>>    1221 run, 1218 passes, 3 expected failures,
> >>>>>      0 failures, 0 errors, 0 unexpected passes
> >>>>>  PharoCore1.1:
> >>>>>    1325 run, 1324 passes, 1 expected failures,
> >>>>>      0 failures, 0 errors, 0 unexpected passes
> >>>>>  PharoCore1.2:
> >>>>>    814 run, 813 expected passes,
> >>>>>      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
> >>>>>      and deprecation warnings
>
> >>>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
> >>>>> have been ported to Pharo1.2 yet ...
>
> >>>>> If you want to look at what I've done you can compare the latest
> >>>>> version of the config with the earliest version of the config in the
> >>>>> repository ... I'll be glad to explain any changes that don't make
> >>>>> sense to you.
>
> >>>>> All four configs also run clean against the Metacello validator ....
>
> >>>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
> >>>>> using to automate the process of determining which versions in a
> >>>>> particular configuration load cleanly into an image and if the tests
> >>>>> pass as well (including checking for deprecation warnings). The
> >>>>> following expression when executed in a PharoCore1.0.x image will load
> >>>>> each version in the configuration and run the tests (loading the
> >>>>> 'Tests' group if it is defined):
>
> >>>>>  (MetacelloToolBox
> >>>>>    validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>
> >>>>> Right now, that script will automatically update the development and
> >>>>> stable symbolic version definitions as well as mark versions as
> >>>>> #release if the 'Tests' group loads without errors or deprecation
> >>>>> warnings and passes all of the tests (without deprecation warnings).
> >>>>> It also produces an 'issues list' that describes the individual
> >>>>> errors, critical warnings and warnings for each version ... much like
> >>>>> the validator with added information about tests.
>
> >>>>> I expect to continue working my way through the various configurations
> >>>>> with the goal to automate as much of the validation and analysis as
> >>>>> possible...
>
> >>>>> Dale
>
> >>>> --
> >>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> >>>> Alexandre Bergel  http://www.bergel.eu
> >>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
> >> --
> >> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> >> Alexandre Bergel  http://www.bergel.eu
> >> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Tudor Girba
In reply to this post by Dale Henrichs
Hi Dale,

I followed your instructions. The version loaded, but the version is not stable because I cannot spawn a browser :). Or am I doing something wrong?

Cheers,
Doru


On 25 Nov 2010, at 17:02, Dale wrote:

> Doru,
>
> If you want to try out the load you need to do a couple of things:
>
>  Gofer new
> gemsource: 'metacello';
> package: 'ConfigurationOfMetacello';
> load.
>
> Then:
>
>  (ConfigurationOfMetacello project version: '1.0-beta.28') load.
>
> Followed by:
>
>  Gofer new
> url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/
> repository/Experiment1/MetacelloRepository';
> package: 'ConfigurationOfGofer';
> package: 'ConfigurationOfRefactoringBrowser';
> package: 'ConfigurationOfShout';
> package: 'ConfigurationOfOCompletion';
> package: 'ConfigurationOfOmniBrowser';
> load.
>
> That way you've got all of the new configurations preloaded in your
> image. And then:
>
>  (ConfigurationOfOmniBrowser project version: #stable) load.
>
> Sorry about not including these instructions in the original message:(
>
> Dale
>
> On Nov 25, 5:10 am, Tudor Girba <[hidden email]> wrote:
>> Hi,
>>
>> I tried:
>> Gofer new
>>         url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>         package: 'ConfigurationOfOmniBrowser';
>>         load.
>>  ((Smalltalk at: #ConfigurationOfOmniBrowser) project version: #stable) load: 'Tests'.
>>
>> But the (ConfigurationOfOmniBrowser project version: #stable) is nil.
>>
>> Cheers,
>> Doru
>>
>> On 25 Nov 2010, at 12:21, Alexandre Bergel wrote:
>>
>>
>>
>>> Is there a short description of symbolic versions somewhere?
>>
>>> Alexandre
>>
>>> On 24 Nov 2010, at 21:46, Dale wrote:
>>
>>>> Over the last few days I've been working on converting
>>>> ConfigurationOfOmniBrowser and the configurations it depends upon
>>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>>>> ConfigurationOfOCompletion) to use symbolic versions.
>>
>>>> The results are stashed away in a repository on the Bibliocello site:
>>
>>>> http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>
>>>> With Metacello 1.0-beta.28 loaded you can execute the following
>>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>>>> the appropriate versions of OmniBrowser and the supporting proejcts
>>>> will be loaded:
>>
>>>> (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>
>>>> So far I have  been using only the 'Tests' group because ... well I
>>>> want to verify that the code not only loads, but passes all of the
>>>> tests (for the loaded projects) in each image and the results are:
>>
>>>> PharoCore1.0:
>>>>   1221 run, 1218 passes, 3 expected failures,
>>>>     0 failures, 0 errors, 0 unexpected passes
>>>> PharoCore1.1:
>>>>   1325 run, 1324 passes, 1 expected failures,
>>>>     0 failures, 0 errors, 0 unexpected passes
>>>> PharoCore1.2:
>>>>   814 run, 813 expected passes,
>>>>     0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>>>     and deprecation warnings
>>
>>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>>>> have been ported to Pharo1.2 yet ...
>>
>>>> If you want to look at what I've done you can compare the latest
>>>> version of the config with the earliest version of the config in the
>>>> repository ... I'll be glad to explain any changes that don't make
>>>> sense to you.
>>
>>>> All four configs also run clean against the Metacello validator ....
>>
>>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>>>> using to automate the process of determining which versions in a
>>>> particular configuration load cleanly into an image and if the tests
>>>> pass as well (including checking for deprecation warnings). The
>>>> following expression when executed in a PharoCore1.0.x image will load
>>>> each version in the configuration and run the tests (loading the
>>>> 'Tests' group if it is defined):
>>
>>>> (MetacelloToolBox
>>>>        validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>
>>>> Right now, that script will automatically update the development and
>>>> stable symbolic version definitions as well as mark versions as
>>>> #release if the 'Tests' group loads without errors or deprecation
>>>> warnings and passes all of the tests (without deprecation warnings).
>>>> It also produces an 'issues list' that describes the individual
>>>> errors, critical warnings and warnings for each version ... much like
>>>> the validator with added information about tests.
>>
>>>> I expect to continue working my way through the various configurations
>>>> with the goal to automate as much of the validation and analysis as
>>>> possible...
>>
>>>> Dale
>>
>>> --
>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>> Alexandre Bergel  http://www.bergel.eu
>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>> --www.tudorgirba.com
>>
>> "In a world where everything is moving ever faster,
>> one might have better chances to win by moving slower."

--
www.tudorgirba.com

"Some battles are better lost than fought."



Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
Hey I just ran the unit tests and they all passed:) (except for the one
that is a bug in the base) There's only so much an automated test can do
.... I didn't actually try opening a browser on any of the platforms and
I can't help it if the unit tests don't verify that a browser can be  opened

I figured that passing the unit tests was an objective measure of the
"stability" of a project and one that can be verified programattically.
It wasn't until I loaded the latest packages available that I got
anywhere near having the tests pass for Omnibrowser on Pharo1.2.

Soooo, just pretend that passing the unit tests is a good enough
definition of #stable for Pharo1.2 and let me know what you think about
the specifications for symbolic versions, since that what I put the
proof of concept together for:)

Dale

On 11/25/2010 02:06 PM, Tudor Girba wrote:

> Hi Dale,
>
> I followed your instructions. The version loaded, but the version is not stable because I cannot spawn a browser :). Or am I doing something wrong?
>
> Cheers,
> Doru
>
>
> On 25 Nov 2010, at 17:02, Dale wrote:
>
>> Doru,
>>
>> If you want to try out the load you need to do a couple of things:
>>
>>   Gofer new
>> gemsource: 'metacello';
>> package: 'ConfigurationOfMetacello';
>> load.
>>
>> Then:
>>
>>   (ConfigurationOfMetacello project version: '1.0-beta.28') load.
>>
>> Followed by:
>>
>>   Gofer new
>> url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/
>> repository/Experiment1/MetacelloRepository';
>> package: 'ConfigurationOfGofer';
>> package: 'ConfigurationOfRefactoringBrowser';
>> package: 'ConfigurationOfShout';
>> package: 'ConfigurationOfOCompletion';
>> package: 'ConfigurationOfOmniBrowser';
>> load.
>>
>> That way you've got all of the new configurations preloaded in your
>> image. And then:
>>
>>   (ConfigurationOfOmniBrowser project version: #stable) load.
>>
>> Sorry about not including these instructions in the original message:(
>>
>> Dale
>>
>> On Nov 25, 5:10 am, Tudor Girba<[hidden email]>  wrote:
>>> Hi,
>>>
>>> I tried:
>>> Gofer new
>>>          url: 'http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>>          package: 'ConfigurationOfOmniBrowser';
>>>          load.
>>>   ((Smalltalk at: #ConfigurationOfOmniBrowser) project version: #stable) load: 'Tests'.
>>>
>>> But the (ConfigurationOfOmniBrowser project version: #stable) is nil.
>>>
>>> Cheers,
>>> Doru
>>>
>>> On 25 Nov 2010, at 12:21, Alexandre Bergel wrote:
>>>
>>>
>>>
>>>> Is there a short description of symbolic versions somewhere?
>>>
>>>> Alexandre
>>>
>>>> On 24 Nov 2010, at 21:46, Dale wrote:
>>>
>>>>> Over the last few days I've been working on converting
>>>>> ConfigurationOfOmniBrowser and the configurations it depends upon
>>>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>>>>> ConfigurationOfOCompletion) to use symbolic versions.
>>>
>>>>> The results are stashed away in a repository on the Bibliocello site:
>>>
>>>>> http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>>
>>>>> With Metacello 1.0-beta.28 loaded you can execute the following
>>>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>>>>> the appropriate versions of OmniBrowser and the supporting proejcts
>>>>> will be loaded:
>>>
>>>>> (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>>
>>>>> So far I have  been using only the 'Tests' group because ... well I
>>>>> want to verify that the code not only loads, but passes all of the
>>>>> tests (for the loaded projects) in each image and the results are:
>>>
>>>>> PharoCore1.0:
>>>>>    1221 run, 1218 passes, 3 expected failures,
>>>>>      0 failures, 0 errors, 0 unexpected passes
>>>>> PharoCore1.1:
>>>>>    1325 run, 1324 passes, 1 expected failures,
>>>>>      0 failures, 0 errors, 0 unexpected passes
>>>>> PharoCore1.2:
>>>>>    814 run, 813 expected passes,
>>>>>      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>>>>      and deprecation warnings
>>>
>>>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>>>>> have been ported to Pharo1.2 yet ...
>>>
>>>>> If you want to look at what I've done you can compare the latest
>>>>> version of the config with the earliest version of the config in the
>>>>> repository ... I'll be glad to explain any changes that don't make
>>>>> sense to you.
>>>
>>>>> All four configs also run clean against the Metacello validator ....
>>>
>>>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>>>>> using to automate the process of determining which versions in a
>>>>> particular configuration load cleanly into an image and if the tests
>>>>> pass as well (including checking for deprecation warnings). The
>>>>> following expression when executed in a PharoCore1.0.x image will load
>>>>> each version in the configuration and run the tests (loading the
>>>>> 'Tests' group if it is defined):
>>>
>>>>> (MetacelloToolBox
>>>>>         validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>>
>>>>> Right now, that script will automatically update the development and
>>>>> stable symbolic version definitions as well as mark versions as
>>>>> #release if the 'Tests' group loads without errors or deprecation
>>>>> warnings and passes all of the tests (without deprecation warnings).
>>>>> It also produces an 'issues list' that describes the individual
>>>>> errors, critical warnings and warnings for each version ... much like
>>>>> the validator with added information about tests.
>>>
>>>>> I expect to continue working my way through the various configurations
>>>>> with the goal to automate as much of the validation and analysis as
>>>>> possible...
>>>
>>>>> Dale
>>>
>>>> --
>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>> Alexandre Bergel  http://www.bergel.eu
>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>>
>>> --www.tudorgirba.com
>>>
>>> "In a world where everything is moving ever faster,
>>> one might have better chances to win by moving slower."
>
> --
> www.tudorgirba.com
>
> "Some battles are better lost than fought."
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Alexandre Bergel-5
In reply to this post by Dale Henrichs
Ok, thanks for this precision

Cheers,
Alexandre


On 25 Nov 2010, at 19:01, Dale wrote:

> I am not suggesting that. What you are proposing implies that there
> are two 2.1.2 versions.
>
> I am suggesting that by using symbolic versions you can specify that:
>
>  version 1.2 is the stable version for Pharo1.0
>  version 2.1.2 is the stable version for Pharo1.2
>
> by loading the #stable version the correct version will be loaded
> based upon the platform you are loading on ...
>
> An additional advantage of symbolic versions is that a project
> reference can specify a symbolic version.
>
> For example, certain packages in Seaside30 depend upon OmniBrowser.
> Seaside30 itself has been written so that version 3.0.2 loads into
> Pharo1.0 and Pharo1.2 correctly.  There is no single version of
> OmniBrowser that loads correctly into both Pharo1.0 and Pharo1.2,
> which creates a bit of a problem for Seaside 30 users.
>
> With symbolic versions it is possible to specify that the #stable
> version of OmniBrowser be loaded by Seaside30. In so doing the correct
> (stable) version of OmniBrowser will be loaded by Seaside30 for the
> platform into which Seaside30 is being loaded ... there is no need to
> Seaside30 to worry about which platforms may be involved ... all that
> needs to be specified is that the #stable version be loaded.
>
> Dale
>
>
> On Nov 25, 1:24 pm, Alexandre Bergel <[hidden email]> wrote:
>> Are you suggesting that we may have two 2.1.2 versions, each for a particular platform? I feel I can get easily confused with that :-)
>>
>> Cheers,
>> Alexandre
>>
>> On 25 Nov 2010, at 17:46, Dale Henrichs wrote:
>>
>>
>>
>>> Alexandre,
>>
>>> What you are suggesting is that there would need to be multiple mappings for the versions 'default' and '2.1.2'...
>>
>>> the problem that we have right now is that '2.1.2' doesn't work in Pharo1.0 (but version '1.2' does), but works in Pharo1.2 (for example).
>>
>>> So we have _different_ versions that apply to different platforms so the solution is to allow a developer to map a version to a platform...
>>
>>> With symbolic versions we still have multiple mappings for the symbolic version, but they are intended from the outset to have multiple mappings and the different is clear.
>>
>>> Dale
>>
>>> On 11/25/2010 12:23 PM, Alexandre Bergel wrote:
>>>> Ok. But why not simply having
>>>> ConfigurationOfMondrian class>>  loadForPharo12
>>>>   (self project version: 'default') load
>>
>>>> ConfigurationOfMondrian loadForPharo111
>>>>   (self project version: '2.1.2') load
>>
>>>> ?
>>
>>>> Alexandre
>>
>>>> On 25 Nov 2010, at 13:44, Dale wrote:
>>
>>>>> Alexandre,
>>
>>>>> Not yet ... I'm still expecting to tweak a thing or two with symbolic
>>>>> versions, but I can take a crack at a short description of what I've
>>>>> got so far.
>>
>>>>> From the beginning Metacello has had the notion of loading the latest
>>>>> version. The expectation was that loading the latest release would
>>>>> always be the best thing to do.
>>
>>>>> As Pharo has moved forward, aggressively cleaning up the base image,
>>>>> it has turned out that loading the latest version isn't always the
>>>>> best solution:
>>
>>>>>  - code that runs in Pharo1.0 won't work in Pharo1.2 and vice versa
>>
>>>>> To solve this problem we need to be able to describe the 'latest
>>>>> version' on a platform by platform basis.
>>
>>>>> 'latest version' is only one of the dimensions that we're interested
>>>>> in. At this point in time, there are really three version dimensions
>>>>> that are interesting:
>>
>>>>>  bleedingEdge - the latest mcz file defined in the latest baseline
>>>>> for a
>>>>>                        project.
>>>>>  development - the currently active development version
>>>>>  stable           - what we really want when we say 'latest version'
>>
>>>>> I expect that over time there will be additional dimensions over time.
>>>>> For Metacello I've already played with #earlyAccess versions which are
>>>>> 'stable' development versions.
>>
>>>>> The requirement is to be able to declare a #stable or #development
>>>>> version on a platform by platform basis. So we've added an two
>>>>> additional pragmas that can be included in Configuration class
>>>>> methods:
>>
>>>>>  <symbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>>>>>  <defaultSymbolicVersion: SYMBOLIC_VERSION_SYMBOL>
>>
>>>>> The #symbolicVersion: pragma is similar to the version pragma
>>>>> (<version: VERSION_STRING>). The following is an example where a set
>>>>> of #stable symbolic versions are declared:
>>
>>>>>  stable: spec
>>>>>       <symbolicVersion: #'stable'>
>>
>>>>>       spec for: #'common' version: '1.0.2.1'.
>>>>>       spec for: #'pharo1.0.x' version: '1.0.2.1'.
>>>>>       spec for: #'pharo1.1.x' version: '1.0.3'.
>>>>>       spec for: #'pharo1.2.x' version: '1.0.4'.
>>
>>>>> The #defaultSymbolicVersion: is used in a method that is expected to
>>>>> be regular smalltalk code that returns a version string. The following
>>>>> is the definition for the #bleedingEdge symbolic version:
>>
>>>>>  bleedingEdge
>>>>>       <defaultSymbolicVersion: #bleedingEdge>
>>
>>>>>       | bleedingEdgeVersion |
>>>>>       bleedingEdgeVersion := (self project map values select: [ :version |
>>>>> version blessing == #baseline ])
>>>>>               detectMax: [ :version | version ].
>>>>>       bleedingEdgeVersion ifNil: [ bleedingEdgeVersion := self project
>>>>> latestVersion ].
>>>>>       bleedingEdgeVersion
>>>>>               ifNil: [ self versionDoesNotExistError: #bleedingEdge ].
>>>>>       ^ bleedingEdgeVersion versionString
>>
>>>>> When specifying a symbolic version with a #symbolicVersion: pragma it
>>>>> is legal to use another symbolic version like the following definition
>>>>> for the symbolic version #stable:
>>
>>>>>  stable: spec
>>>>>       <symbolicVersion: #'stable'>
>>
>>>>>       spec for: #'gemstone' version: '1.5'.
>>>>>       spec for: #'squeak' version: '1.4'.
>>>>>       spec for: #'pharo1.0.x' version: '1.5'.
>>>>>       spec for: #'pharo1.1.x' version: '1.5'.
>>>>>       spec for: #'pharo1.2.x' version: #development.
>>
>>>>> Or to use the special symbolic version #notDefined: as in the
>>>>> following definition of the symbolic version #development:
>>
>>>>>  development: spec
>>>>>       <symbolicVersion: #'development'>
>>
>>>>>       spec for: #'common' version: #notDefined.
>>>>>       spec for: #'pharo1.1.x' version: '1.6'.
>>>>>       spec for: #'pharo1.2.x' version: '1.6'.
>>
>>>>> Using a symbolic version that resolves to #notDefined will result in a
>>>>> MetacelloSymbolicVersionNotDefinedError being signalled.
>>
>>>>> A symbolic version may be used anywhere that a literal version may be
>>>>> used.
>>
>>>>> Well, this should cover the basics...
>>
>>>>> Dale
>>
>>>>> On Nov 25, 3:21 am, Alexandre Bergel<[hidden email]>  wrote:
>>>>>> Is there a short description of symbolic versions somewhere?
>>
>>>>>> Alexandre
>>
>>>>>> On 24 Nov 2010, at 21:46, Dale wrote:
>>
>>>>>>> Over the last few days I've been working on converting
>>>>>>> ConfigurationOfOmniBrowser and the configurations it depends upon
>>>>>>> (ConfigurationOfRefactoringBrowser, ConfigurationOfShout, and
>>>>>>> ConfigurationOfOCompletion) to use symbolic versions.
>>
>>>>>>> The results are stashed away in a repository on the Bibliocello site:
>>
>>>>>>>  http://a-bibliocello.gemstone.com/bibliocello/projects/Pharo/reposito...
>>
>>>>>>> With Metacello 1.0-beta.28 loaded you can execute the following
>>>>>>> expression in a PharoCore1.0, PharoCore1.1, or PharoCore1.2 image and
>>>>>>> the appropriate versions of OmniBrowser and the supporting proejcts
>>>>>>> will be loaded:
>>
>>>>>>>  (ConfigurationOfOmniBrowser project version: #stable) load: 'Tests'.
>>
>>>>>>> So far I have  been using only the 'Tests' group because ... well I
>>>>>>> want to verify that the code not only loads, but passes all of the
>>>>>>> tests (for the loaded projects) in each image and the results are:
>>
>>>>>>>  PharoCore1.0:
>>>>>>>    1221 run, 1218 passes, 3 expected failures,
>>>>>>>      0 failures, 0 errors, 0 unexpected passes
>>>>>>>  PharoCore1.1:
>>>>>>>    1325 run, 1324 passes, 1 expected failures,
>>>>>>>      0 failures, 0 errors, 0 unexpected passes
>>>>>>>  PharoCore1.2:
>>>>>>>    814 run, 813 expected passes,
>>>>>>>      0 expected failures, 0 failures, 1 errors, 0 unexpected passes,
>>>>>>>      and deprecation warnings
>>
>>>>>>> For Pharo1.2, OB-Refactory is not loaded, because it doesn't appear to
>>>>>>> have been ported to Pharo1.2 yet ...
>>
>>>>>>> If you want to look at what I've done you can compare the latest
>>>>>>> version of the config with the earliest version of the config in the
>>>>>>> repository ... I'll be glad to explain any changes that don't make
>>>>>>> sense to you.
>>
>>>>>>> All four configs also run clean against the Metacello validator ....
>>
>>>>>>> I've developed a set of scripts (in MetacelloToolBox) that I have been
>>>>>>> using to automate the process of determining which versions in a
>>>>>>> particular configuration load cleanly into an image and if the tests
>>>>>>> pass as well (including checking for deprecation warnings). The
>>>>>>> following expression when executed in a PharoCore1.0.x image will load
>>>>>>> each version in the configuration and run the tests (loading the
>>>>>>> 'Tests' group if it is defined):
>>
>>>>>>>  (MetacelloToolBox
>>>>>>>    validatePlatformLoad: #'pharo1.0.x' for: 'OmniBrowser') explore.
>>
>>>>>>> Right now, that script will automatically update the development and
>>>>>>> stable symbolic version definitions as well as mark versions as
>>>>>>> #release if the 'Tests' group loads without errors or deprecation
>>>>>>> warnings and passes all of the tests (without deprecation warnings).
>>>>>>> It also produces an 'issues list' that describes the individual
>>>>>>> errors, critical warnings and warnings for each version ... much like
>>>>>>> the validator with added information about tests.
>>
>>>>>>> I expect to continue working my way through the various configurations
>>>>>>> with the goal to automate as much of the validation and analysis as
>>>>>>> possible...
>>
>>>>>>> Dale
>>
>>>>>> --
>>>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>>>> Alexandre Bergel  http://www.bergel.eu
>>>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>>>> --
>>>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>>>> Alexandre Bergel  http://www.bergel.eu
>>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>>
>> --
>> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
>> Alexandre Bergel  http://www.bergel.eu
>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.





Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

stephane ducasse-2
In reply to this post by Dale Henrichs
dale

It would be really nice if you could take 10 min and extract a small but true example describing the problems
like that we can paste it in the book chapter :)
I'm sure other people will get confused.
I think that the key point is to be able to specify that stable is relative to a platform version and that
you do not have to write all the way such methods

>>>> ConfigurationOfMondrian class>>  loadForPharo12
>>>> (self project version: 'default') load
>>
>>>> ConfigurationOfMondrian loadForPharo111
>>>> (self project version: '2.1.2') load

this way you avoid ripple effect and get much more stable (non volatile) specs.

Stef


Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
Stef, Alexandre,

I know I'm missing something, but I'm not sure what:) I don't think I
understand the confusing part...I know that I'm too close to the
soution, so I'll appreciate your patience while you educate me a
little bit more...

Dale

On Nov 26, 1:04 am, stephane ducasse <[hidden email]>
wrote:

> dale
>
> It would be really nice if you could take 10 min and extract a small but true example describing the problems
> like that we can paste it in the book chapter :)
> I'm sure other people will get confused.
> I think that the key point is to be able to specify that stable is relative to a platform version and that
> you do not have to write all the way such methods
>
> >>>> ConfigurationOfMondrian class>>  loadForPharo12
> >>>> (self project version: 'default') load
>
> >>>> ConfigurationOfMondrian loadForPharo111
> >>>> (self project version: '2.1.2') load
>
> this way you avoid ripple effect and get much more stable (non volatile) specs.
>
> Stef
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Alexandre Bergel-5
Personally, the biggest problem I have with Metacello, is that when something is going wrong, the error messages are not that useful. Several times I had to ask you and the mailing list to know what's going wrong. I had started to work on a support for Metacello in the Monticello browser. I use it and it helps me.

Supporting version to platform mapping is important (we are currently being bitten by this). But I spend more time on getting a configuration right than missing the mapping.

This is just my personal feeling and opinion.

Cheers,
Alexandre


On 26 Nov 2010, at 14:06, Dale wrote:

> Stef, Alexandre,
>
> I know I'm missing something, but I'm not sure what:) I don't think I
> understand the confusing part...I know that I'm too close to the
> soution, so I'll appreciate your patience while you educate me a
> little bit more...
>
> Dale
>
> On Nov 26, 1:04 am, stephane ducasse <[hidden email]>
> wrote:
>> dale
>>
>> It would be really nice if you could take 10 min and extract a small but true example describing the problems
>> like that we can paste it in the book chapter :)
>> I'm sure other people will get confused.
>> I think that the key point is to be able to specify that stable is relative to a platform version and that
>> you do not have to write all the way such methods
>>
>>>>>> ConfigurationOfMondrian class>>  loadForPharo12
>>>>>> (self project version: 'default') load
>>
>>>>>> ConfigurationOfMondrian loadForPharo111
>>>>>> (self project version: '2.1.2') load
>>
>> this way you avoid ripple effect and get much more stable (non volatile) specs.
>>
>> Stef

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.





Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Tudor Girba
In reply to this post by Dale Henrichs
Hi,

Let me try an explanation.

Metacello versions are used for versioning your configurations.

However, these numbers do not have any meaning regarding the intended use and context. For example, when we want to specify what is #stable for various combinations of platforms, we need a slightly different kind of versions. Dale calls these the symbolic versions.

Cheers,
Doru


On 26 Nov 2010, at 18:06, Dale wrote:

> Stef, Alexandre,
>
> I know I'm missing something, but I'm not sure what:) I don't think I
> understand the confusing part...I know that I'm too close to the
> soution, so I'll appreciate your patience while you educate me a
> little bit more...
>
> Dale
>
> On Nov 26, 1:04 am, stephane ducasse <[hidden email]>
> wrote:
>> dale
>>
>> It would be really nice if you could take 10 min and extract a small but true example describing the problems
>> like that we can paste it in the book chapter :)
>> I'm sure other people will get confused.
>> I think that the key point is to be able to specify that stable is relative to a platform version and that
>> you do not have to write all the way such methods
>>
>>>>>> ConfigurationOfMondrian class>>  loadForPharo12
>>>>>> (self project version: 'default') load
>>
>>>>>> ConfigurationOfMondrian loadForPharo111
>>>>>> (self project version: '2.1.2') load
>>
>> this way you avoid ripple effect and get much more stable (non volatile) specs.
>>
>> Stef

--
www.tudorgirba.com

"Beauty is where we see it."



Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
In reply to this post by Alexandre Bergel-5
Stef, Alexandre,

I'm going to try again. If I miss the point please try to help zero in
on the issue. I clearly misinterpretted your question the first time aroudn

On 11/25/2010 12:23 PM, Alexandre Bergel wrote:
> Ok. But why not simply having
> ConfigurationOfMondrian class>>  loadForPharo12
>    (self project version: 'default') load
>
> ConfigurationOfMondrian loadForPharo111
>    (self project version: '2.1.2') load
>
> ?

You are suggesting that the problem be solved by using class-side load
methods named for the target platform.

Using class-side load methods is an approach that could work, but it has
a drawback in that another project that depends upon Mondrian has no way
to specify "use the loadForPharo111 method when loading Mondrian".

Using symbolic versions, ConfigurationOfMondrian would have the
following method:

   stable: spec
         <symbolicVersion: #'stable'>

         spec for: #'pharo1.1.x' version: '2.1.2'.
         spec for: #'pharo1.2.x' version: 'default'.

an explicit specification of your class-side implementation.

If I had a project (ConfigurationOfExample) that depended upon Mondrian,
I would specify that dependence upon Mondrian in my baseline method as
follows:

   baseline100: spec
     <version: '1.0-baseline'>
       
     spec for: #common do: [
         spec blessing: #baseline.
     ].
     spec for: #pharo do: [
         spec project: 'Mondrian' with: [
             spec
               className: 'ConfiguraitonOfMondrian';
               repository: 'http://www.squeaksource.com/Mondrian'.].
         spec package: 'Example-Core' with: [
             spec requires: 'Mondrian' ].
     ].

Then in my version method I would specify which version of Mondrian to
use as follows:

   version10: spec
     <version: '1.0' imports: #('1.0-baseline')>

     spec for: #common do: [
         spec blessing: #release.
     ].
     spec for: #pharo do: [
         spec project: 'Mondrian' with: #stable.
         spec package: 'Example-Core' with: 'Example-Core-dkh.1'.
     ].


Now a user of my Example project would load version 1.0:

   (ConfigurationOfExample project version: '1.0') load

and the platform appropriate version of Mondrian would be loaded...

I don't think that the same thing can be accomplished using class-side
methods.

Dale
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
In reply to this post by Alexandre Bergel-5
Alexandre,

I understand what you are saying.

With the 1.0-beta.28 release I am introducing configuration validation
and a toolbox.

The validator flags three different kinds of issues:

   - warning
   - critical warning
   - error

'Error issues' identify specifications that are incorrect and will
result in walkbacks if an attempt is made to resolve the specification.

'Critical warning issues' identify specifications that are technically
correct (i.e., no walkbacks will be thrown attempting to resolve the
specification), but could lead to surprising results when resolved, like
multiple methods that specify the same version.

'Warning issues' identify specifications that are technically and
logically correct, but may not be what you indended, like a
configuration with only a #baseline version specified.

The toolbox provides a set of scripts that can be used by a GUI tool or
can be used in class-side methods for development support ...

I'm using the toolbox to script out the development/release process for
the Seaside and Grease configurations.

Seeing your emailed questions, I realized that the Metacello API was too
sparse to be useful to anyone but an expert (okay ME). The toolbox
codifies a number of operations that have performed manually in the past
or written scripts or OB commands to perform and in writing the scripts
I expanded the basic Metacello API to make writing the scripts easier ...

I plan to expand on your initial additions to the Monticello Browser
with more toolbox-based support.

Dale
On 11/26/2010 09:29 AM, Alexandre Bergel wrote:

> Personally, the biggest problem I have with Metacello, is that when something is going wrong, the error messages are not that useful. Several times I had to ask you and the mailing list to know what's going wrong. I had started to work on a support for Metacello in the Monticello browser. I use it and it helps me.
>
> Supporting version to platform mapping is important (we are currently being bitten by this). But I spend more time on getting a configuration right than missing the mapping.
>
> This is just my personal feeling and opinion.
>
> Cheers,
> Alexandre
>
>
> On 26 Nov 2010, at 14:06, Dale wrote:
>
>> Stef, Alexandre,
>>
>> I know I'm missing something, but I'm not sure what:) I don't think I
>> understand the confusing part...I know that I'm too close to the
>> soution, so I'll appreciate your patience while you educate me a
>> little bit more...
>>
>> Dale
>>
>> On Nov 26, 1:04 am, stephane ducasse<[hidden email]>
>> wrote:
>>> dale
>>>
>>> It would be really nice if you could take 10 min and extract a small but true example describing the problems
>>> like that we can paste it in the book chapter :)
>>> I'm sure other people will get confused.
>>> I think that the key point is to be able to specify that stable is relative to a platform version and that
>>> you do not have to write all the way such methods
>>>
>>>>>>> ConfigurationOfMondrian class>>   loadForPharo12
>>>>>>> (self project version: 'default') load
>>>
>>>>>>> ConfigurationOfMondrian loadForPharo111
>>>>>>> (self project version: '2.1.2') load
>>>
>>> this way you avoid ripple effect and get much more stable (non volatile) specs.
>>>
>>> Stef
>
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

Dale Henrichs
In reply to this post by Tudor Girba
Yes...!

On 11/26/2010 10:03 AM, Tudor Girba wrote:

> Hi,
>
> Let me try an explanation.
>
> Metacello versions are used for versioning your configurations.
>
> However, these numbers do not have any meaning regarding the intended use and context. For example, when we want to specify what is #stable for various combinations of platforms, we need a slightly different kind of versions. Dale calls these the symbolic versions.
>
> Cheers,
> Doru
>
>
> On 26 Nov 2010, at 18:06, Dale wrote:
>
>> Stef, Alexandre,
>>
>> I know I'm missing something, but I'm not sure what:) I don't think I
>> understand the confusing part...I know that I'm too close to the
>> soution, so I'll appreciate your patience while you educate me a
>> little bit more...
>>
>> Dale
>>
>> On Nov 26, 1:04 am, stephane ducasse<[hidden email]>
>> wrote:
>>> dale
>>>
>>> It would be really nice if you could take 10 min and extract a small but true example describing the problems
>>> like that we can paste it in the book chapter :)
>>> I'm sure other people will get confused.
>>> I think that the key point is to be able to specify that stable is relative to a platform version and that
>>> you do not have to write all the way such methods
>>>
>>>>>>> ConfigurationOfMondrian class>>   loadForPharo12
>>>>>>> (self project version: 'default') load
>>>
>>>>>>> ConfigurationOfMondrian loadForPharo111
>>>>>>> (self project version: '2.1.2') load
>>>
>>> this way you avoid ripple effect and get much more stable (non volatile) specs.
>>>
>>> Stef
>
> --
> www.tudorgirba.com
>
> "Beauty is where we see it."
>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: symbolic version proof of concept...

stephane ducasse-2
You can complement:
        using symbolic versions also avoid to change all the configurations when a change happen. You just change the mapping to stable for example.
        and the guys depending on you do not have to get updated.
I hope that this is correct

Stef
On Nov 26, 2010, at 7:47 PM, Dale Henrichs wrote:

> Yes...!
>
> On 11/26/2010 10:03 AM, Tudor Girba wrote:
>> Hi,
>>
>> Let me try an explanation.
>>
>> Metacello versions are used for versioning your configurations.
>>
>> However, these numbers do not have any meaning regarding the intended use and context. For example, when we want to specify what is #stable for various combinations of platforms, we need a slightly different kind of versions. Dale calls these the symbolic versions.
>>
>> Cheers,
>> Doru
>>
>>
>> On 26 Nov 2010, at 18:06, Dale wrote:
>>
>>> Stef, Alexandre,
>>>
>>> I know I'm missing something, but I'm not sure what:) I don't think I
>>> understand the confusing part...I know that I'm too close to the
>>> soution, so I'll appreciate your patience while you educate me a
>>> little bit more...
>>>
>>> Dale
>>>
>>> On Nov 26, 1:04 am, stephane ducasse<[hidden email]>
>>> wrote:
>>>> dale
>>>>
>>>> It would be really nice if you could take 10 min and extract a small but true example describing the problems
>>>> like that we can paste it in the book chapter :)
>>>> I'm sure other people will get confused.
>>>> I think that the key point is to be able to specify that stable is relative to a platform version and that
>>>> you do not have to write all the way such methods
>>>>
>>>>>>>> ConfigurationOfMondrian class>>   loadForPharo12
>>>>>>>> (self project version: 'default') load
>>>>
>>>>>>>> ConfigurationOfMondrian loadForPharo111
>>>>>>>> (self project version: '2.1.2') load
>>>>
>>>> this way you avoid ripple effect and get much more stable (non volatile) specs.
>>>>
>>>> Stef
>>
>> --
>> www.tudorgirba.com
>>
>> "Beauty is where we see it."
>>
>>
>>

12