small typo in my paste the actual code i used is
Metacello new baseline:'Nireas'; repository:'github://kilon/Nireas:master'; get; load. any help is appreciated :) On Sat, Nov 15, 2014 at 12:50 PM, kilon alios <[email protected]> wrote: > 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 >>> >>> >>> >>> >>> >> >
