Hi Mariano - I’ve looked at this again, and it was my fault - I was compiling
in :
fuelAccept: aGeneralMapper
^self explicitRequirement.
Because when I looked at the Traits for fuel - this is what it had for TClass?
- as I’m not so clear on traits, what does this mean - as I had just assumed
that I should flatten the Fuel methods for TCLass, TBehaviour and
TClassDescription - but I think I’ve misunderstood what I should do (and I
guess from Pavel’s comment - I should really look at why that initial method
was missing as it sounds like it should have worked - so maybe its an order
loading thing?).
Thanks, for helping by the way - this is proving very instructional.
Tim
> On 3 Aug 2017, at 18:26, Mariano Martinez Peck <[email protected]> wrote:
>
>
> On Thu, Aug 3, 2017 at 2:14 PM, Tim Mackinnon <[email protected]
> <mailto:[email protected]>> wrote:
> Hi Mariano - I compiled in the trait methods manually and it got further -
> but now I’m seeing another error - Error: Explicitly required method",
> "\u001b[0mLambda class(Object)>>error:",
> "explicitRequirement”,
>
>
> mmmm the stack is weird... it looks like if Class >> fuelAccept: would have
> the wrong implementation, that is, having the one from TClass:
>
> fuelAccept: aGeneralMapper
> ^self explicitRequirement.
>
> Rather than the correct one:
>
> fuelAccept: aGeneralMapper
>
> ^aGeneralMapper visitClass: self
>
>
> Maybe the solution is to compile all those methods from traits BUT NOT those
> that are "^self explicitRequirement." because those will override the good
> methods.
>
> If that doesn't work, then maybe can you print to console the each impl
> (source) of each implementor of #fuelAccept: ?
>
> Thoughts?
>
>
>
>
> Any ideas?
>
> Tim
>
> "--- RUNNING ERROR HANDLER ---",
> "Error: Explicitly required method",
> "",
> "\u001b[0m\u001b[31mError: Explicitly required method",
> "\u001b[0mLambda class(Object)>>error:",
> "explicitRequirement",
> " self error: 'No decompiler available' in Lambda
> class(Object)>>explicitRequirement in Block: explicitRequirement...",
> "False>>ifFalse:",
> "Lambda class(Object)>>explicitRequirement",
> "Lambda class(Class)>>fuelAccept:",
> "FLLightGeneralMapper>>mapAndTrace:",
> "FLLightGlobalMapper>>mapAndTrace:",
> "FLPluggableSubstitutionMapper>>mapAndTrace:",
> "FLAnalysis>>mapAndTrace:",
> "FLAnalysis>>run",
> "setDefaultAnalysis",
> " self error: 'No decompiler available' in
> FLAnalyzer>>setDefaultAnalysis in Block: setDefaultAnalysis...",
> "FLAnalyzer>>analysisFor:",
> "FLSerialization>>analysisStep",
> "FLSerialization>>run",
> "setDefaultSerialization",
> " self error: 'No decompiler available' in
> FLSerializer>>setDefaultSerialization in Block: setDefaultSerialization...",
> "serialize: t1 on: t2",
> " self error: 'No decompiler available' in FLSerializer>>serialize:on:
> in Block: serialize: t1 on: t2...",
> "on: t1 globalEnvironment: t2 do: t3",
> " self error: 'No decompiler available' in FLEncoder
> class>>on:globalEnvironment:do: in Block: on: t1 globalEnvironment: t2 do:
> t3...",
> "BlockClosure>>ensure:",
> "FLEncoder class>>on:globalEnvironment:do:",
> "FLSerializer>>serialize:on:",
> "NonInteractiveUIManager>>writeFuelContext:",
> "Lambda class>>processDebug:",
> "Lambda class>>processJSON:",
> "Lambda class>>process:",
> "activate",
>
>> On 3 Aug 2017, at 17:26, Mariano Martinez Peck <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>
>>
>> On Thu, Aug 3, 2017 at 1:17 PM, Tim Mackinnon <[email protected]
>> <mailto:[email protected]>> wrote:
>> Hi guys - I think I’m getting close - I’m able to load remote packages, and
>> I’ve added fuel to my repo and its loading - however I am getting an error
>> when I run and test writing out a context - MessageNotUnderstood: Context
>> class>>fuelIgnoredInstanceVariableNames
>>
>> I can see that this is a trait - is trait support missing in the minimal
>> image?
>>
>>
>> Uff...that's a good question hahahhah
>> I don't know if the minimal image supports traits, but what I am almost
>> sure, is the Behavior DOES need the methods defined in TBehavior. So maybe
>> the minimal image flattens the traits. In this case you could do the same
>> for Fuel (flattenDownAllTraits)
>>
>> (I also seemed to get this far just loading the Fuel package - but just to
>> be sure I added the other platform ones like you suggested and still get the
>> same error). Given how simple that method is, I could just compile it in -
>> but maybe there are many more?
>>
>>
>>
>> TBehavior, TClass and TClassDescription are the only one that comes to my
>> mind right now... there are only a few methods from Fuel. So could compile
>> those directly at least on a first step...at least you keep you going.
>>
>>
>>
>>
>> Tim
>>
>>
>> "errorMessage": "Command failed: ./pharo Pharo.image
>> --no-default-preferences process Lambda '{\"debug\":true,\"data\":5}'\n
>> "errorType": "Error",
>> "stackTrace": [
>> "Writing fuel context to S3...",
>> "Using S3 bucket morethan-technology-projects",
>> "\u001b[31m",
>> "--- RUNNING ERROR HANDLER ---",
>> "MessageNotUnderstood: Context class>>fuelIgnoredInstanceVariableNames",
>> "",
>> "\u001b[0m\u001b[31mMessageNotUnderstood: Context
>> class>>fuelIgnoredInstanceVariableNames",
>> "\u001b[0mContext class(Object)>>doesNotUnderstand:
>> #fuelIgnoredInstanceVariableNames",
>> "FLVariablesMapping>>instanceVariableNamesToSerialize",
>> "FLVariablesMapping>>initializeAnalyzing",
>> "FLVariablesMapping class>>newAnalyzing:references:",
>> "FLContextCluster(FLPointerObjectCluster)>>initializeAnalyzing:",
>> "FLContextCluster class(FLObjectCluster class)>>newAnalyzing:",
>> "clusterKeyedByObjectClass: t1 class: t2",
>> " self error: 'No decompiler available' in
>> FLLightGeneralMapper(FLMapper)>>clusterKeyedByObjectClass:class: in Block:
>> clusterKeyedByObjectClass: t1 class: t2...",
>> "clusterInstanceOf: t1 keyInBucket: t2 factory: t3",
>> " self error: 'No decompiler available' in
>> FLLightGeneralMapper(FLMapper)>>clusterInstanceOf:keyInBucket:factory: in
>> Block: clusterInstanceOf: t1 keyInBucket: t2 factory: t3...",
>> "at: t1 ifAbsentPut: t2",
>> " self error: 'No decompiler available' in
>> IdentityDictionary(Dictionary)>>at:ifAbsentPut: in Block: at: t1
>> ifAbsentPut: t2...",
>> "IdentityDictionary(Dictionary)>>at:ifAbsent:",
>> "IdentityDictionary(Dictionary)>>at:ifAbsentPut:",
>> "FLLightGeneralMapper(FLMapper)>>clusterInstanceOf:keyInBucket:factory:",
>> "FLLightGeneralMapper(FLMapper)>>clusterKeyedByObjectClass:class:",
>> "FLLightGeneralMapper(FLMapper)>>mapAndTraceByObjectClass:to:",
>> "FLLightGeneralMapper>>visitMethodContext:",
>> "Context>>fuelAccept:",
>> "FLLightGeneralMapper>>mapAndTrace:",
>> "FLLightGlobalMapper>>mapAndTrace:",
>> "FLPluggableSubstitutionMapper>>mapAndTrace:",
>> "FLAnalysis>>mapAndTrace:",
>> "FLAnalysis>>run",
>> "setDefaultAnalysis",
>> " self error: 'No decompiler available' in
>> FLAnalyzer>>setDefaultAnalysis in Block: setDefaultAnalysis...",
>> "FLAnalyzer>>analysisFor:",
>> "FLSerialization>>analysisStep",
>> "FLSerialization>>run",
>> "setDefaultSerialization",
>> " self error: 'No decompiler available' in
>> FLSerializer>>setDefaultSerialization in Block: setDefaultSerialization...",
>> "serialize: t1 on: t2",
>> " self error: 'No decompiler available' in FLSerializer>>serialize:on:
>> in Block: serialize: t1 on: t2...",
>> "on: t1 globalEnvironment: t2 do: t3",
>> " self error: 'No decompiler available' in FLEncoder
>> class>>on:globalEnvironment:do: in Block: on: t1 globalEnvironment: t2 do:
>> t3...",
>> "BlockClosure>>ensure:",
>> "FLEncoder class>>on:globalEnvironment:do:",
>> "\u001b[0m"
>>> On 3 Aug 2017, at 13:16, Mariano Martinez Peck <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>>
>>>
>>> On Thu, Aug 3, 2017 at 8:58 AM, Tim Mackinnon <[email protected]
>>> <mailto:[email protected]>> wrote:
>>> I’m so close now (bit of a diversion with gitlab yml not liking the eval
>>> string) - that did load and it got me really close - I’m just missing
>>> FlSerializer now (I have progressed my work to fuel out the context for
>>> debugging to S3)… so looking at the repo, there are quite a few fuel
>>> packages - but in a big image I can see that FLSerialiser is in Core - so
>>> do I just need core? But then there are a few fuel packages with Core?
>>>
>>>
>>> The easiest way to understand that is either checking ConfigurationOfFuel
>>> directly or some of the related Metacello tool.
>>> Anyway, for this case, I think you need the packages (in this order):
>>> FuelPlatform and Fuel. Bug again, Metacello allows some postLoad actions
>>> (which we use in Fuel)... so...it's not always easy to load a project
>>> without Metacello.
>>>
>>> Sometimes you can print the result of #record:
>>>
>>> Metacello new
>>> configuration: 'Fuel';
>>> smalltalkhubUser: 'Pharo' project: 'Fuel';
>>> version: #stable;
>>> record: #('Core').
>>>
>>> ->
>>>
>>> "linear load :
>>> linear load : 2.1.10 [ConfigurationOfFuel]
>>> linear load : baseline [ConfigurationOfFuelPlatform]
>>> load : FuelPlatform-Core
>>> load : FuelPlatform-Pharo-Core
>>> load : FuelPlatform-Pharo-06"
>>>
>>>
>>> ------
>>>
>>> Anyway.... I guess I would try to load these packages (in this order):
>>>
>>> FuelPlatform-Core
>>> FuelPlatform-Pharo-Core
>>> FuelPlatform-Pharo-06
>>> Fuel
>>>
>>> And when you are down loading, then execute:
>>>
>>> (Smalltalk at: #FLPlatform) current addHacks
>>>
>>>
>>> I’m also not quite clear on how I would load packages without a Baseline
>>> (would I create my own baseline for the fuel packages I need?)
>>>
>>> Tim
>>>
>>>> On 3 Aug 2017, at 12:07, Pavel Krivanek <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>
>>>>
>>>>
>>>> 2017-08-03 13:02 GMT+02:00 Tim Mackinnon <[email protected]
>>>> <mailto:[email protected]>>:
>>>> I really appreciate your patience and help on this - it looks very
>>>> promising and I am giving it a spin now…
>>>>
>>>> When you say the pharo repository - are you referring to this:
>>>> https://github.com/pharo-project/pharo/tree/master/src
>>>> <https://github.com/pharo-project/pharo/tree/master/src>. ? Just so I know
>>>> for the future.
>>>>
>>>> yes
>>>>
>>>> -- Pavel
>>>>
>>>>
>>>> Tim
>>>>
>>>>> On 3 Aug 2017, at 09:16, Pavel Krivanek <[email protected]
>>>>> <mailto:[email protected]>> wrote:
>>>>>
>>>>>
>>>>>
>>>>> 2017-08-03 10:14 GMT+02:00 Pavel Krivanek <[email protected]
>>>>> <mailto:[email protected]>>:
>>>>> The easiest think you can do is to copy to your repository (or some
>>>>> other) related packages from the Pharo repository (to do not have to
>>>>> clone it all):
>>>>>
>>>>> Metacello-GitBasedRepository.package
>>>>> Metacello-GitHub.package
>>>>> SUnit-Core.package
>>>>>
>>>>> and create baseline to load them. I already tried it so you can test it:
>>>>> https://drive.google.com/open?id=0BzSsmZhqtUTeMVJacTZtdW5UQW8
>>>>> <https://drive.google.com/open?id=0BzSsmZhqtUTeMVJacTZtdW5UQW8>
>>>>>
>>>>> Then you will do something like:
>>>>>
>>>>> (accidental message send ;-) )
>>>>>
>>>>> BASELINE=MetacelloGitBasedRepository
>>>>> pharo "$IMAGE_NAME.image" --no-default-preferences eval --save \
>>>>> "Metacello new baseline: '$BASELINE'; repository:
>>>>> 'filetree://./PharoLambda/src <>'; load."
>>>>>
>>>>> BASELINE=Lambda
>>>>> pharo "$IMAGE_NAME.image" --no-default-preferences eval --save \
>>>>> "Metacello new baseline: '$BASELINE'; repository:
>>>>> 'filetree://./PharoLambda/src <>'; load."
>>>>>
>>>>> As I tried that. The baseline of Lambda is then able to be loaded.
>>>>>
>>>>> -- Pavel
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2017-08-02 15:18 GMT+02:00 Tim Mackinnon <[email protected]
>>>>> <mailto:[email protected]>>:
>>>>> Ah, I think I’m starting to get closer to what I need…
>>>>>
>>>>> So if I want to load in that last piece to enable more general remote
>>>>> loading - how do I figure out how to do that? I’m trying to work out
>>>>> where the build steps for building up the image (can I see them in
>>>>> Jenkins? It wasn’t clear to me if I can look it up? Or the BaselineOfIDE
>>>>> was mentioned - looking there I can see a few metacello and gofer
>>>>> packages - but then I guess I’m looking for an easy Mcz I can use with
>>>>> the example below?
>>>>>
>>>>> Or do I just load Metacello as a git submodule and then it will be on my
>>>>> local filesystem to then bootstrap up?
>>>>>
>>>>> I guess I’m trying to work out the best sustainable approach to getting
>>>>> to a good server based image that has minimal tools and the ability to
>>>>> easily load remote code for pre-req projects.
>>>>>
>>>>> Tim
>>>>>
>>>>>> On 2 Aug 2017, at 07:05, Guillermo Polito <[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>>
>>>>>> Yes, you should be able to load an mcz in that image by doing:
>>>>>>
>>>>>> (MCDirectoryRepository new directory: 'where-your-mcz-is')
>>>>>> loadVersionFromFileNamed:
>>>>>> 'Metacello-GitBasedRepository-Author.1.mcz') load.
>>>>>>
>>>>>> Guille
>>>>>>
>>>>>> On Wed, Aug 2, 2017 at 7:57 AM, Pavel Krivanek <[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>>
>>>>>> 2017-08-01 23:13 GMT+02:00 Tim Mackinnon <[email protected]
>>>>>> <mailto:[email protected]>>:
>>>>>> Hi Pavel - I tried it again and the problem is do with Metacello
>>>>>> dependencies in your baseline.
>>>>>>
>>>>>> The SUnit baseline doesn’t specify any additional dependencies to load
>>>>>> (it just loads local packages), whereas my baseline that fails looks
>>>>>> like this:
>>>>>>
>>>>>> baseline: spec
>>>>>> <baseline>
>>>>>>
>>>>>> spec for: #common do: [
>>>>>> spec configuration: 'ZTimestamp' with: [
>>>>>> spec
>>>>>> versionString: #stable;
>>>>>> repository: 'http://mc.stfx.eu/Neo
>>>>>> <http://mc.stfx.eu/Neo>' ].
>>>>>>
>>>>>> spec baseline: 'AWS' with: [
>>>>>> spec repository:
>>>>>> 'github://newapplesho/aws-sdk-smalltalk:v1.10/pharo-repository <>' ].
>>>>>>
>>>>>> spec
>>>>>> package: 'Lambda' with: [ spec requires: {'ZTimestamp'.
>>>>>> 'AWS'}].
>>>>>>
>>>>>> ].
>>>>>>
>>>>>>
>>>>>> The “spec configuration: ….” Specifications cause the error:
>>>>>>
>>>>>> 25 UndefinedObject(Object)>>doesNotUnderstand: #addTo:
>>>>>> 26 MCRepositoryGroup>>addRepository:
>>>>>>
>>>>>> If I remove those lines from my baseline above (as well the requires:
>>>>>> reference to them) I can then successfully load my packages.
>>>>>>
>>>>>> So is this something the minimal image should support (otherwise how do
>>>>>> you load external packages into your image without checking them in
>>>>>> locally?) OR is there something simple I can checkin and load locally to
>>>>>> return that behaviour? (Personally I think it would make sense to allow
>>>>>> remote loading - I’m guessing Pharo itself as a core has everything it
>>>>>> needs - but if you want to do any experimentation on the core and need
>>>>>> remote packages, you would hit this too - so it feels a bit limiting).
>>>>>>
>>>>>> The dependencies in th baseline are supported but the support for most
>>>>>> of external repositories (like package Metacello-GitBasedRepository) is
>>>>>> loaded at the end of bootstrapping process in BaselineOfIDE. We should
>>>>>> check/solve dependencies and move it into the minimal Pharo. For now you
>>>>>> can try to load it by yourself or work with already prepared local
>>>>>> clones of required repositories.
>>>>>>
>>>>>> -- Pavel
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Tim
>>>>>>
>>>>>>> On 1 Aug 2017, at 10:06, Pavel Krivanek <[email protected]
>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2017-07-31 22:51 GMT+02:00 Tim Mackinnon <[email protected]
>>>>>>> <mailto:[email protected]>>:
>>>>>>> I wasn’t clear on which image to retry - the
>>>>>>> https://ci.inria.fr/pharo/job/Pharo-6.0-Update-Step-3.2-Minimal/lastSuccessfulBuild/artifact/Pharo-minimal-64.zip
>>>>>>>
>>>>>>> <https://ci.inria.fr/pharo/job/Pharo-6.0-Update-Step-3.2-Minimal/lastSuccessfulBuild/artifact/Pharo-minimal-64.zip>
>>>>>>> one still shows as being last updated 7 days ago.
>>>>>>>
>>>>>>> The
>>>>>>> https://ci.inria.fr/pharo/view/6.0-SysConf/job/Pharo-6.0-Step-04-01-ConfigurationOfMinimalPharo/
>>>>>>>
>>>>>>> <https://ci.inria.fr/pharo/view/6.0-SysConf/job/Pharo-6.0-Step-04-01-ConfigurationOfMinimalPharo/>
>>>>>>> one gives me a mismatch error: This interpreter (vers. 68021) cannot
>>>>>>> read image file (vers. 6521).
>>>>>>>
>>>>>>> The
>>>>>>> https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bit-Conversion/lastSuccessfulBuild/artifact/latest-minimal-64.zip
>>>>>>>
>>>>>>> <https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bit-Conversion/lastSuccessfulBuild/artifact/latest-minimal-64.zip>
>>>>>>> one gives me a walkback when trying to run my install script :
>>>>>>>
>>>>>>> 25 UndefinedObject(Object)>>doesNotUnderstand: #addTo:
>>>>>>> 26 MCRepositoryGroup>>addRepository:
>>>>>>> 27 createRepository
>>>>>>> | repo |
>>>>>>> repo := self project createRepository: self.
>>>>>>> ^ MCRepositoryGroup default repositories
>>>>>>> detect: [ :each | each = repo ]
>>>>>>> ifNone: [
>>>>>>> MCRepositoryGroup default addRepository: repo.
>>>>>>> repo ] in MetacelloRepositorySpec>>createRepository
>>>>>>>
>>>>>>> I think this is because the image doesn’t support Metacello? As in:
>>>>>>> Metacello new
>>>>>>> repository: 'filetree://../src <>';
>>>>>>> baseline: 'Lambda';
>>>>>>> load.
>>>>>>>
>>>>>>> How do you guys load things into the minimal images (I thought you used
>>>>>>> Metacello - but maybe you do it some other way?)
>>>>>>>
>>>>>>> I can use a big 6.1 image fine (as it has Metacello loaded) but I’d
>>>>>>> really like a minimal solution - that can load in libraries like AWS
>>>>>>> S3, or XML parsing etc. and it seems like I should be a good customer
>>>>>>> for kicking the tires on all of this.
>>>>>>>
>>>>>>> Tim
>>>>>>>
>>>>>>>
>>>>>>> I checked the 64-bit Pharo 7 minimal image and loading of baseline (of
>>>>>>> SUnit from pharo-project/pharo) works:
>>>>>>>
>>>>>>> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval --save "Metacello new
>>>>>>> baseline: 'SUnit'; repository: 'filetree://./pharo-core/src <>'; load."
>>>>>>>
>>>>>>> ./pharo Pharo7.0-minimal-64bit-b1625bf.image eval "TestCase suite run"
>>>>>>>
>>>>>>> Can you test it too?
>>>>>>>
>>>>>>> -- Pavel
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> Guille Polito
>>>>>>
>>>>>> Research Engineer
>>>>>> French National Center for Scientific Research - http://www.cnrs.fr
>>>>>> <http://www.cnrs.fr/>
>>>>>>
>>>>>>
>>>>>> Web: http://guillep.github.io <http://guillep.github.io/>
>>>>>> Phone: +33 06 52 70 66 13 <tel:+33%206%2052%2070%2066%2013>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>> --
>>> Mariano
>>> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
>>
>>
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
>
>
>
> --
> Mariano
> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>