Stef,

The Thanksgiving holiday is coming up tomorrow and through the weekend ... I 
promised my wife that I would avoid the computer this weekend since I was away 
in Argentina for 10 days, but I will probably be able to find a couple of hours 
poke at an image and try to see where things are falling through the cracks:)

Dale

----- Original Message -----
| From: "Stéphane Ducasse" <[email protected]>
| To: [email protected]
| Sent: Wednesday, November 21, 2012 2:40:17 PM
| Subject: Re: [Pharo-project] Metacello loading semantics
| 
| 
| On Nov 21, 2012, at 8:51 PM, Dale Henrichs wrote:
| 
| > Doru,
| > 
| > The loadDirectives structure is the structure that does the actual
| > package load for metacello, so extracting the information from the
| > loadDirectives is the correct technique for producing a list of
| > packages in load order. From a cursory read of Stefs code he
| > appears to be doing it correctly ... atomic/linear loadType is an
| > important distinction that has to be taken into account when
| > attempting to reproduce the Metacello load behavior without using
| > Metacello…
| 
| We thought that too but I got a problem with Roassal since it looks
| like some classes are not loaded first.
| 
| > Of course in the end, it's the details like which packages/projects
| > specifically are causing trouble that will help me figure out
| > exactly where things are breaking down. I assume that when
| > Metacello does the load, everything gets loaded correctly?
| 
| Well when we use the configuration of Moose (not the flatten one) it
| loads: this is the Moose default configuration.
| 
| > If you want me to help build/debug a package flattener for Moose I
| > would be glad to help, but I need more detailed information about
| > what you are trying to do and why. Also having the actual code to
| > look at and a reproducible test case makes addressing issues a ton
| > easier...Perhaps making an image available with a workspace doit
| > primed for failure is a good first step:)
| 
| The code in MooseReloader on smalltalkhub. I'm going to bed that and
| tomorrow I follow lectures so I will explain it to you.
| 
| 
| 
| > 
| > Dale
| > 
| > ----- Original Message -----
| > | From: "Tudor Girba" <[email protected]>
| > | To: [email protected]
| > | Sent: Wednesday, November 21, 2012 10:49:12 AM
| > | Subject: Re: [Pharo-project] Metacello loading semantics
| > | 
| > | Hi Dale,
| > | 
| > | The question is how to get all packages that will be loaded for a
| > | given configuration version in the correct order. We want to
| > | obtain
| > | that to provide a flattened configuration version based on what
| > | is
| > | in the image.
| > | 
| > | Cheers,
| > | Doru
| > | 
| > | 
| > | 
| > | On 21 Nov 2012, at 19:33, Dale Henrichs <[email protected]>
| > | wrote:
| > | 
| > | > Stef,
| > | > 
| > | > If you need to leverage the multi-package load, you can do that
| > | > in
| > | > Metacello by using the #atomic loadType in the project method
| > | > of
| > | > your configuration:
| > | > 
| > | >  project
| > | >    ^ project
| > | >        ifNil: [
| > | >            "Bootstrap Metacello if it is not already loaded"
| > | >            self class ensureMetacello.
| > | >            project := self projectClass new projectAttributes:
| > | >            self
| > | >            customProjectAttributes.     "Create the Metacello
| > | >            project"
| > | >            project versionNumberClass: self versionNumberClass.
| > | >            project class versionConstructorClass on: self
| > | >            project:
| > | >            project.     "Construct the project"
| > | >            project loadType: #'atomic'. "change to #atomic if
| > | >            desired"
| > | >            project ]
| > | > 
| > | > With #atomic, all of the packages are loaded in one
| > | > multi-package
| > | > load. with #linear (the default) each package is loaded
| > | > individually.
| > | > 
| > | > If you inspect the loadDirectives that are produced by the
| > | > #record
| > | > message, the load type is encoded in the class of the
| > | > directive,
| > | > so you can tell whether #linear or #atomic loadTypes are used
| > | > in
| > | > the configurations...
| > | > 
| > | > Does this help?
| > | > 
| > | > Dale
| > | > 
| > | > ----- Original Message -----
| > | > | From: "Stéphane Ducasse" <[email protected]>
| > | > | To: "Pharo Development" <[email protected]>
| > | > | Sent: Saturday, November 17, 2012 11:28:03 AM
| > | > | Subject: [Pharo-project] Metacello loading semantics
| > | > | 
| > | > | Hi dale
| > | > | 
| > | > | I implemented a little tool that
| > | > |       - create a kind of specification (version, package, repo)
| > | > |       for
| > | > |       all
| > | > |       the packages reachable from a configurationOf
| > | > |               (see below method method
| > | > |               
packagesAndAssociatedRepositoriesFromConfigurationRecord )
| > | > | 
| > | > |       It generates a script looking as follows:
| > | > |       script3
| > | > |               ^ #(
| > | > |                       #('ConfigurationOfFame-TudorGirba.5.mcz'
| > | > |                        'http://www.squeaksource.com/Fame/'
| > | > |                         'ConfigurationOfFame' )
| > | > |                       #('ConfigurationOfMooseAlgos-usmanbhatti.27.mcz'
| > | > |                        'http://www.squeaksource.com/MooseAlgos/'
| > | > |                        'ConfigurationOfMooseAlgos' )
| > | > |                       #('ConfigurationOfGlamour-TudorGirba.98.mcz'
| > | > |                        'http://www.squeaksource.com/Glamour/'
| > | > |                         'ConfigurationOfGlamour'
| > | > |                       )
| > | > |                       #('ConfigurationOfDSM-AlexandreBergel.56.mcz'
| > | > |                        'http://www.squeaksource.com/dsm/'  
'ConfigurationOfDSM'
| > | > |                        )
| > | > |                       #('ConfigurationOfKumpel-AlexandreBergel.3.mcz'
| > | > |                        'http://www.squeaksource.com/Kumpel/'
| > | > |                         'ConfigurationOfKumpel' )
| > | > |                       #('ConfigurationOfSmallDud………….)
| > | > |       
| > | > |       - I keep the order given by Metacello. I extract the
| > | > |       information
| > | > |       as
| > | > |       follows:
| > | > | 
| > | > | packagesAndAssociatedRepositoriesFromConfigurationRecord:
| > | > | aConfigurationRecord
| > | > |     "| record |
| > | > |     record := ((Smalltalk globals at: #ConfigurationOfMoose)
| > | > |     project
| > | > |     version: 'default')   ignoreImage: true;  record.
| > | > |     self
| > | > |     packagesAndAssociatedRepositoriesFromConfigurationRecord:
| > | > |     record
| > | > |     "
| > | > | 
| > | > |     | pkgs |
| > | > |      pkgs := OrderedCollection new.
| > | > |      aConfigurationRecord loadDirective packageDirectivesDo:
| > | > |      [:directive |
| > | > |         pkgs add:
| > | > |             {directive spec name, '*'.
| > | > |             (self removeCache: directive spec workingCopy
| > | > |             repositoryGroup repositories) anyOne
| > | > |              locationWithTrailingSlash} ].
| > | > |      ^ pkgs
| > | > | 
| > | > | 
| > | > |       - then I try to load the package as follows:
| > | > | 
| > | > |       flatVersion47: spec
| > | > |               <version: '4.7-flat'>
| > | > |       
| > | > |               spec for: #common do: [
| > | > |                       self populateSpec: spec with: self script3 ]
| > | > | 
| > | > | I load them doing
| > | > |       (ConfigurationOfMoose project version: '4.7-flat') load
| > | > | Now It does not work because after fetching all the packages,
| > | > | the
| > | > | system complain that some classes that will be loaded later
| > | > | are
| > | > | not
| > | > | present.
| > | > | I imagine that you use Gofer and that Gofer does not use the
| > | > | merging
| > | > | semantics of MC over multiple projects (that you can have
| > | > | multiple
| > | > | package in any order and that the classes get loaded - as I
| > | > | use
| > | > | it
| > | > | for the scriptLoader and below).
| > | > | 
| > | > | 
| > | > | - before  I was doing it by doing a diff between the pharo
| > | > | package
| > | > | and the one loaded and I was loading the specification after
| > | > | installing the repository
| > | > | and the working copies using the MCVersionLoader and it
| > | > | worked I
| > | > | could reload completely Moose!
| > | > |       
| > | > | 
| > | > |       load: aCollectionOfPackageString
| > | > |       "self new
| > | > |               load: #( 'Famix-C-TudorGirba.15'
| > | > |                'Famix-Core-NicolasAnquetil.201'))"
| > | > |       
| > | > |       | loader |
| > | > |       loader :=  MCVersionLoader new.
| > | > |       (self newerVersionsIn: aCollectionOfPackageString)
| > | > |               do: [ :fn | loader addVersion: (self
| > | > |               loadVersionFromFileNamed:
| > | > |               fn).
| > | > |               (Delay forSeconds: 2) wait.]
| > | > |               displayingProgress: 'Adding versions...'.
| > | > |       loader hasVersions ifTrue: [loader load].
| > | > | 
| > | > | 
| > | > | So my question is
| > | > |       - Does the  packageDirectivesDo: provide an order that I can
| > | > |       use
| > | > |       to
| > | > |       load package with the gofer-load on project at a time?
| > | > |       May be my code does not keep the same order but I payed
| > | > |       attention to
| > | > |       this point. I will check that further.
| > | > |       
| > | > |       - may be I could extend Gofer to support multiple project
| > | > |       merge
| > | > |       loading.
| > | > | 
| > | > | So right now I'm stuck and this is sad because freezing a
| > | > | complex
| > | > | configuration is really needed.
| > | > | 
| > | > | Stef
| > | > | 
| > | > | 
| > | > | 
| > | > | 
| > | > | 
| > | > | 
| > | > 
| > | 
| > | --
| > | www.tudorgirba.com
| > | 
| > | "It's not what we do that matters most, it's how we do it."
| > | 
| > | 
| > | 
| > 
| 

Reply via email to