On 10/30/2015 10:04 AM, Eliot Miranda wrote:
Hi Dale,
but why can't Metacello provide something really simple that automatically
generates a configuration with all the prerequisites fully defined as fixed
specific versions? Then Holger can easily freeze his release using the new
confit and continue his internal development using his current configuration.
Your suggestion implies that Holger would have to "take ownership" of
the generated configuration and he would no longer be using the
"official" configurations ... If the official configurations for the
projects he is using change, how do you propose he merge in those changes?
In git the version that you check out _is already_ a collection of the
"fixed specific versions", so there is no need to create and maintain an
"automatic configuration generator" .... that's the SCMs job.
When using git things get simpler rather than more complex. For example
just compare the ConfigurationOfSeaside3[1] (mzc repo) and the
BaselineOfSeaside3[2] (git repo). On method count alone there are ~10
times more methods in ConfigurationOfSeaside3 than in BaselineOfSeaside3
... then look at the methods themselves!
[1]
http://smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main/ConfigurationOfSeaside3-JohanBrichau.280.mcz
[2]
https://github.com/SeasideSt/Seaside/tree/master/repository/BaselineOfSeaside3.package/BaselineOfSeaside3.class/instance
Why is is about the repository and not the versions?
Because versions _should_ be managed by the repository, not the package
manager ...
git and other disk based SCMS give me a single SHA (or other identifier)
that uniquely identifies the collection of files on disk .. one can tag
this SHA and give it a version name ... this is the job of an SCM ...
The ConfigurationOf was invented to fill in the gap between what you
could do with Monticello and what needed to be done --- which was to tag
a _collection_ of packages with a version name --- and manage project
and package dependencies ....
Metacello does this.
But there is more to "to be done" than just tagging a _collection_ of
pages with a version name ...
One should be able to see the differences between versions: changes to
packages plus added and removed packages. Metacello does not do this.
One should be able to merge one version into another. Metacello does not
do this.
Git and other SCM based SCM do show you diffs between versions and you
can merge changes between two different versions... as an added bonus
you can include your documentation, images and shell scripts in the same
directory structure and version them altogether in one swell foop.
Rather than attempt to duplicate the entire range of functionality that
git and other disk-based SCMs provide, I choose to leverage existing
functionality and put my effort into inventing new things in Smalltalk....
Dale