On Sun, Feb 10, 2013 at 12:24 PM, St�phane Ducasse
<stephane.ducasse@inria.fr> wrote:
Hi dale
I'm migrating Moose and I got the following question. In terms of granularity of dependency when depending of project.
Before we had Fame that depended directly on one package of phexample.
baseline11: spec
� � � � <version: '1.1-baseline'>
� � � � spec for: #'common' do: [
� � � � � � � � spec blessing: #'baseline'.
� � � � � � � � spec description: 'Baseline 1.1 first version on SmalltalkHub, copied from baseline 1.0 on SqueakSource'.
� � � � � � � � spec repository: 'http://www.smalltalkhub.com/mc/Moose/Fame/main'.
� � � � � � � � spec
� � � � � � � � � � � � package: 'Fame-Core';
� � � � � � � � � � � � package: 'Fame-Util';
� � � � � � � � � � � � package: 'Fame-ImportExport' with: [spec requires: #('Fame-Core' ) ];
� � � � � � � � � � � � package: 'Fame-SmalltalkBinding' with: [spec requires: #('Fame-Core' ) ];
� � � � � � � � � � � � package: 'Fame-Example';
� � � � � � � � � � � � package: 'Phexample' with: [spec repository: 'http://www.squeaksource.com/phexample' ];
� � � � � � � � ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
� � � � � � � � � � � � package: 'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-Example' 'Phexample' ) ].
� � � � � � � � spec
� � � � � � � � � � � � group: 'Core' with: #('Fame-Core' 'Fame-ImportExport' 'Fame-Util' 'Fame-SmalltalkBinding' );
� � � � � � � � � � � � group: 'Tests' with: #('Fame-Tests-Core' ) ].
Stefan created a configuration for PhExample so the Fame baseline now depends on the Phexample project
baseline12: spec
� � � � <version: '1.2-baseline'>
� � � � spec for: #'common' do: [
� � � � � � � � spec blessing: #'baseline'.
� � � � � � � � spec description: 'Baseline 1.2 to make explicit that Fame depends on HashTable and Phexample (now on smalltalkHub and with working configurations'.
� � � � � � � � spec repository: 'http://www.smalltalkhub.com/mc/Moose/Fame/main'.
� � � � � � � � spec project: 'HashTable' with: [
� � � � � � � � � � � � � � � � spec
� � � � � � � � � � � � � � � � � � � � className: 'ConfigurationOfHashTable';
� � � � � � � � � � � � � � � � � � � � versionString: #stable;
� � � � � � � � � � � � � � � � � � � � repository: 'http://www.smalltalkhub.com/mc/Moose/HashTable/main' ].
� � � � � � � � spec project: 'Phexample' with: [
� � � � � � � � � � � � � � � � spec
� � � � � � � � � � � � � � � � � � � � className: 'ConfigurationOfPhexample';
� � � � � � � � � � � � � � � � � � � � versionString: #stable;
� � � � � � � � � � � � � � � � � � � � repository: 'http://www.smalltalkhub.com/mc/Phexample/main' ].
Say you just need the package Core from Phexample (I have just invented the package name) so you can define:
� � � spec project: 'PhexampleCore' with: [
� � � � � � � � � � � � � � � � spec
� � � � � � � � � � � � � � � � � � � � className: 'ConfigurationOfPhexample';
� � � � � � � � � � � � � � � � � � � � versionString: #stable;
� � � � � � � � � � � � � � � � � � � � � � loads: #('Core');
� � � � � � � � � � � � � � � � � � � � repository: 'http://www.smalltalkhub.com/mc/Phexample/main' ].
And then do:
'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-Example' 'PhexampleCore' ) ].
Notice all this above this is NOT the same as doing:
That way you are just download a package from a repository, Metacello is not involved. So for example if PhexampleCore has dependencies....they are not laoded.
With the code I pasted above, you don't just download a package from a repo, instead, you say Metacello you depend on a package. And that is managed as metacello. So for example if PhexampleCore has dependencies, they will be loaded and managed.
Best,�
�
� � � � � � � � spec
� � � � � � � � � � � � package: 'Fame-Core' with: [spec requires: 'HashTable'];
� � � � � � � � � � � � package: 'Fame-Util';
� � � � � � � � � � � � package: 'Fame-ImportExport' with: [spec requires: #('Fame-Core' ) ];
� � � � � � � � � � � � package: 'Fame-SmalltalkBinding' with: [spec requires: #('Fame-Core' ) ];
� � � � � � � � � � � � package: 'Fame-Example';
� � � � � � � � � � � � package: 'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-Example') ].
� � � � � � � � spec
� � � � � � � � � � � � group: 'Core' with: #('Fame-Core' 'Fame-ImportExport' 'Fame-Util' 'Fame-SmalltalkBinding' );
� � � � � � � � � � � � group: 'Tests' with: #('Fame-Tests-Core' ) ].
Now my question
we got from package: 'Fame-Tests-Core' with: [spec requires: #('Fame-Core' 'Fame-Example' 'Phexample' ) ].
to a dependency between project and I was wondering if this is ok because may be a project is large and we only
depend on a small part.
Then doing so we are also losing the information that this is Fame-Tests-Core that introduces the dependency to PhExample
and for large project such information can be important
So is there a way to keep it?
Stef