+1 ----- Original Message ----- | From: "Mariano Martinez Peck" <marianopeck@gmail.com> | To: Pharo-project@lists.gforge.inria.fr | Cc: "Dale Henrichs" <dhenrich@vmware.com> | Sent: Sunday, February 10, 2013 7:40:53 AM | Subject: Re: [Pharo-project] About dependency granularity in metacello | | 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: | | package: 'Phexample' with: [spec repository: ' | http://www.squeaksource.com/phexample' ]; | | 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 | > | > | > | > | > | > | | | -- | Mariano | http://marianopeck.wordpress.com |