[squeak-dev] Seaside, Squeak4.4, SqueakMap and Metacello, or
Why Software Configuration Management is Important (war: Re: [Seaside]
New catalog entry for Seaside 3.0.3)
dhenrich at vmware.com
Thu Mar 7 21:20:17 UTC 2013
----- Original Message -----
| From: "Frank Shearar" <frank.shearar at gmail.com>
| To: "The general-purpose Squeak developers list" <squeak-dev at lists.squeakfoundation.org>
| Sent: Thursday, March 7, 2013 2:26:45 AM
| Subject: Re: [squeak-dev] Seaside, Squeak4.4, SqueakMap and Metacello, or Why Software Configuration Management is
| Important (war: Re: [Seaside] New catalog entry for Seaside 3.0.3)
| Well, it depends on what the #squeaksource: send does. The
| ConfigurationOf should define the dependencies (including versions),
| but _should not_ tell you where to get the artifacts. So if
| #squeaksource: (and presumably similar messages) are how you say to
| Metacello "get these locally or, failing that, get these from A or,
| failing that, from B", then I'm happy.
There are some basic rules that Metacello follows for loading packages:
1. If the specified package version is already loaded in the
image, nothing is done
2. If a later version of the package version is already loaded
in the image, nothing is done
3. If the specified package version is present in the package-cache,
the package is loaded from the package-cache
4. If the specified package version is found in one of the repositories
listed for the package or project (multiple repositories may be
specified) the package is loaded from the first repository it is found
in (search order of repositories is not guaranteed)
5. throw an error
If one doesn't specify an explicit package version then the "latest version of the package" is loaded. The Gofer sort order for packages is used to determine "latest version". In this case, all of the associated repositories are unconditionally searched for the "latest version", but once the "latest version" is determined, the above listed rules are applied.
If a package is dirty, a notification is raised and if handled one can choose to override the dirty package. The default action is to skip loading over dirty pacakages.
The rules for loading configurations is similar to packages except for a couple of exceptions:
1. If the version being loaded is blessed as #development, then a new copy
of the configuration is loaded from the repository.
2. If you request a version that is not present in the loaded configuration,
then an attempt is made to load the latest version of the configuration
package from the repositories associated with the configuration and then
the version lookup is tried again.
I'm not exactly sure whether this covers your: "get these locally or, failing that, get these from A or, failing that, from B", but I at least you should have a better idea of what Metacello does do ...
More information about the Squeak-dev