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

Reply via email to