Travis seems like an overkill for me right now. Sure if I was bombarded by
pull requests from other developers but in reality I work alone .  But I
will definitely keep it in mind in case my projects become so popular that
people start to send me pull requests regularly.

All I wanted was an easy way to install code from github to pharo without
the need to install git and you gave me that. Next step is to see how I
would integrate github with pharo better, should I use Configuration
versions or is it better to use branches ? I am more orientated towards
branches.

I have stared your repos to make sure I get keep updated in any progress
you make. I plan also to go back and re read that metacello chapter to
better understand metacello.

Thank you very much for your hard work, keep rocking :)

On Sat, Nov 15, 2014 at 7:15 PM, Dale Henrichs <
[email protected]> wrote:

> Kilon,
>
> Regarding Pharo4.0 and Metacello, I just recently added Pharo4.0 support
> to Metacello[1] and buildCI[2].
>
> If you are using github, then you should checkout builderCI. BuilderCI
> let's you hook into travis-ci[3] and run unit tests on every commit. It's
> especially useful when you get a pull request, because the unit tests are
> run against the MERGED version of the pull request (BEFORE you do the
> merge), so you can be assured that when you do the merge, your tests will
> be green ...
>
> Let me know if the builderCI instructions[4] work for you...It's been
> awhile since I've reviewed the docs:)
>
> Dale
>
> [1] https://groups.google.com/forum/#!topic/metacello/TVzfP8ZwPPE
> [2] https://github.com/dalehenrich/builderCI
> [3] https://travis-ci.org/
> [4] https://github.com/dalehenrich/builderCI#using-builderci
>
> On Sat, Nov 15, 2014 at 8:55 AM, kilon alios <[email protected]>
> wrote:
>
>> YESSSS!!!!
>>
>> thanks Dale, you are awesome, it works like a charm for me now.
>>
>> Yes you needed to download the Pharo3DarkTheme because the Theme is
>> installed by default in Pharo 4 and I dont intent on supporting pharo 3
>> with my project. If you tried Pharo 4 you would have no such issue.
>>
>> I would appreciate it if other people could spend just a minute getting
>> latest Pharo 4 and trying this in a Workspace
>>
>> Metacello new
>> baseline:'Nireas';
>> repository:'github://kilon/nireas:master';
>> get.
>>
>> Metacello new
>> baseline:'Nireas';
>> repository:'github://kilon/nireas:master';
>> load.
>>
>> Then open a System Browser and make sure Nireas package exist and please
>> report it here if its not much trouble.  This solution is super easy for
>> installing git repos and we could make a class to make it even easier with
>> a single line command.
>>
>> Question: Why Pharo 4 has not got the latest Metacello ?
>>
>> On Sat, Nov 15, 2014 at 6:33 PM, Dale Henrichs <
>> [email protected]> wrote:
>>
>>> Kilon,
>>>
>>> This code:
>>>
>>> Metacello new
>>> baseline:'Nireas';
>>> repository:'github://kilon/Nireas:master';
>>> get;
>>> load.
>>>
>>> does require a pretty recent version of Metacello ("chaining" the get
>>> and load)[1].  I tried the following in a stock pharo3.0 and got an error
>>> about requiring Pharo3DarkTheme, so I was able to load the package:
>>>
>>> Metacello new
>>> baseline:'Nireas';
>>> repository:'github://kilon/Nireas:master';
>>> get.
>>> Metacello new
>>> baseline:'Nireas';
>>> repository:'github://kilon/Nireas:master';
>>> load.
>>>
>>> Dale
>>>
>>> [1] https://github.com/dalehenrich/metacello-work#pharo30
>>>
>>> On Sat, Nov 15, 2014 at 3:13 AM, kilon alios <[email protected]>
>>> wrote:
>>>
>>>> ok after rereading your emails more carefully i realised that you meant
>>>> that BaselineOf should go to its own package, so I moved the class to
>>>> BaselineOfNireas package and now it does not report the same error but now
>>>> it complain that project,baseline or configuration not specified.
>>>>
>>>> Is it mandatory to specify a configuration for my project , I though
>>>> the baseline class was enough. Would love to hear more info on the subject,
>>>> I am looking also at the Metacello chapter which by the way is in Deep Into
>>>> Pharo and not PBE , I see loads of info on the subject but does not seem to
>>>> mention anything about the BaselineOf class .
>>>>
>>>> Will love it if we can gave a simple way to load git repos to pharo 4.
>>>>
>>>> On Sat, Nov 15, 2014 at 12:53 PM, kilon alios <[email protected]>
>>>> wrote:
>>>>
>>>>> 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
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to