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." | > | | > | | > | | > |
