hello Dale I tried your approach with a new project I created called Nireas, its a theme manager for pharo 4. I followed your instructions and it complains that it cannot find the BaselineOfNireas
This is the code I used Metacello new baseline:'Nireas'; repository:'github://kilon/nireas:master'; get; load. here is the repo https://github.com/kilon/Nireas and here is the error MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>retryingResolvePackageSpecReferences:gofer: linearLoadPackageSpec: packageSpec gofer: gofer MetacelloPlatform current do: [ | references nearestReference cachedReference externalReference mcVersion loadedVersionInfos | "check to see if mcz file is already in cacheRepository" cachedReference := self resolvePackageSpec: packageSpec cachedGofer: self loaderPolicy cacheGofer. (cachedReference ~~ nil and: [ packageSpec getFile ~~ nil ]) ifTrue: [ cachedReference name = packageSpec file ifTrue: [ "exact match between packageSpec file and cache" ^ self scheduleFetchFor: packageSpec cachedReference: cachedReference ] ]. "look up mcz file" references := self retryingResolvePackageSpecReferences: packageSpec gofer: gofer. nearestReference := references last asMetacelloCachingResolvedReference. "If the mcz is already in the cacheRepository, no need to copy" (cachedReference ~~ nil and: [ cachedReference name = nearestReference name ]) ifTrue: [ "latest reference in repository matches cachedReference ... " ^ self scheduleFetchFor: packageSpec nearestReference: nearestReference ]. "If the mcz is already loaded into the image, no need to copy" (self ignoreImage not and: [ (loadedVersionInfos := self ancestorsFor: packageSpec) ~~ nil ]) ifTrue: [ loadedVersionInfos do: [ :info | info name = nearestReference name ifTrue: [ ^ self ] ] ]. externalReference := (references select: [ :ref | ref name = nearestReference name ]) first asMetacelloCachingResolvedReference. self repositoryMap at: externalReference name put: externalReference repository. (self resolveDependencies: externalReference nearest: nearestReference into: (OrderedCollection with: nearestReference)) do: [ :reference | | pSpec l | mcVersion := reference version. (l := (GoferVersionReference name: reference name) resolveAllWith: self loaderPolicy cacheGofer) isEmpty ifTrue: [ self cacheRepository storeVersion: mcVersion. reference == nearestReference ifTrue: [ pSpec := packageSpec ] ifFalse: [ pSpec := packageSpec project packageSpec. pSpec name: mcVersion package name ]. self loadData addVersion: mcVersion versionInfo: mcVersion info resolvedReference: reference packageSpec: pSpec ] ]. self scheduleFetchFor: packageSpec externalReference: externalReference ] displaying: 'Fetching ' , packageSpec file in MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer: in Block: linearLoadPackageSpec: packageSpec gofer: gofer... MetacelloPharo30Platform(MetacelloPlatform)>>do:displaying: MetacelloFetchingMCSpecLoader>>linearLoadPackageSpec:gofer: MetacelloPackageSpec>>loadUsing:gofer: [ :pkg | pkg loadUsing: self gofer: gofer ] in MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories: in Block: [ :pkg | pkg loadUsing: self gofer: gofer ] Array(SequenceableCollection)>>do: MetacelloFetchingMCSpecLoader(MetacelloCommonMCSpecLoader)>>linearLoadPackageSpecs:repositories: [ super linearLoadPackageSpecs: packageSpecs repositories: repositories ] in MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories: in Block: [ super linearLoadPackageSpecs: packageSpecs repos...etc... BlockClosure>>ensure: MetacelloLoaderPolicy>>pushLoadDirective:during: MetacelloLoaderPolicy>>pushExplicitLoadDirectivesDuring:for: MetacelloFetchingMCSpecLoader>>explicitLoadPackageSpecs:repositories: MetacelloPackageSpec>>explicitLoadUsing: MetacelloPackageSpec>>load [ self setDefaultsAndValidateProjectSpec. spec := self projectSpec. projectPackage := spec projectPackage. projectPackage repositorySpecs do: [ :repoSpec | repoSpec createRepository flushForScriptGet ]. projectPackage load. self root: (Smalltalk at: spec className asSymbol) project. MetacelloProjectRegistration registrationForProjectSpec: spec ifAbsent: [ :new | new registerProject ] ifPresent: [ :existing :new | existing copyOnWrite: [ :existingCopy | spec copyForRegistration: existingCopy onWrite: [ :specCopy | specCopy ifNil: [ existingCopy merge: new ] ifNotNil: [ specCopy mergeScriptRepository: spec ] ] ] ] ] in MetacelloScriptEngine>>get in Block: [ ... BlockClosure>>ensure: MetacelloProjectRegistration class>>copyRegistryRestoreOnErrorWhile: MetacelloScriptEngine>>get [ :projectSpec | | engine | engine := MetacelloScriptEngine new options: self options copy; projectSpec: projectSpec; yourself. engine perform: actionArg key withArguments: actionArg value. engine root ifNotNil: [ :root | self roots add: root ] ] in MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: in Block: [ :projectSpec | ... [ :projectSpec | projectSpec ifNotNil: [ projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ] ] in MetacelloScriptApiExecutor>>executeString:do: in Block: [ :projectSpec | projectSpec ifNotNil: [ projectSp...etc... Array(SequenceableCollection)>>do: MetacelloScriptApiExecutor>>executeString:do: ByteString(String)>>execute:against: MetacelloScriptApiExecutor(MetacelloScriptExecutor)>>execute: Metacello>>execute Metacello>>get UndefinedObject>>DoIt OpalCompiler>>evaluate RubSmalltalkEditor>>evaluateSelectionAndDo: On Tue, Oct 21, 2014 at 10:55 PM, kilon alios <[email protected]> wrote: > Thank you Dale very much , this is very clear :) > > On Tue, Oct 21, 2014 at 10:53 PM, Dale Henrichs < > [email protected]> wrote: > >> >> >> On Tue, Oct 21, 2014 at 12:04 PM, kilon alios <[email protected]> >> wrote: >> >>> Thank you Dale, this is more simple than I expected. >>> >>> From what you linked it looks like by [:comitish] you mean the git >>> branch .Which in my case is master so it should be >>> >>> Metacello new >>> baseline: 'BaselineOfXXX'; >>> repository: 'github://kilon/phEphestos:master/' >>> get; >>> load. >>> >>> https://github.com/kilon/phEphestos >>> >> >> From looking at your repo on githug, the expression would be: >> >> Metacello new >> baseline: 'Ephestos'; >> repository: 'github://kilon/phEphestos:master' >> get; >> load. >> >> A commitish is a branch, SHA or tag. Note also, that my example was wrong >> ... the 'BaselineOf' shouldn't be used in the baseline: argument, just the >> base name of the project. >> >> You also need to create a BaselineOfEphestos which specifies package >> load order. BaselineOfEphestos would be created as a subclass of BaselineOf >> and have a single method: >> >> baseline: spec >> <baseline> >> spec >> for: #pharo >> do: [ >> spec package: 'Ephestos' ]. >> >> Then the above expression would load the Epestos package. >> >> If you were to add another package, say EphestosTests, then you'd update >> the baseline to declare that EphestosTests requires Ephestos to be loaded >> first you'd edit the baseline: method: >> >> baseline: spec >> <baseline> >> spec >> for: #pharo >> do: [ >> spec >> package: 'Ephestos'; >> package: 'EphestosTests' with: [ spec requires: #( 'Ephestos' ) >> ] ]. >> >> You commit the BaselineOf along with the rest of the packages for your >> project ... >> >> For more information see the Metacello chapter in Pharo by Example... >> >> Dale >> >> >> >> >> >
