How to listen Monticello load start/end (and origin of changes)
Hi, Doru asked me how does Epicea listen this information, and I created a snippet to demo it *in a plain Pharo 5 image* (no need to load Epicea before). Maybe somebody else is interested, that's why I share it with everybody. You can open a Transcript and evaluate the following snippet. After evaluation, you can add new methods in Nautilus and see the log in the Transcript. (The code is not very nice). Cheers, Martin "Listen load start" Job jobAnnouncer when: JobStart do: [ :aJobStart | | owner | owner := aJobStart job owner. (owner isKindOf: MCVersionLoader) ifTrue: [ ('Starting to load ', owner versions asArray asString) logCr ] ]. "Listen load end" Job jobAnnouncer when: JobEnd do: [ :aJobEnd | | owner | owner := aJobEnd job owner. (owner isKindOf: MCVersionLoader) ifTrue: [ ('Ending to load ', owner versions asArray asString) logCr ] ]. "Listen changes in the middle" SystemAnnouncer uniqueInstance when: MethodAdded do: [ :aMethodAdded | | mcLoaderJobOrNil | mcLoaderJobOrNil := Job current ifNil: [ nil ] ifNotNil: [ :currentJob | currentJob lookup: [ :job | job owner isKindOf: MCVersionLoader ] ifNone: [ nil ] ]. (aMethodAdded methodAdded printString, ' --- ', (mcLoaderJobOrNil ifNil: [ 'no info' ] ifNotNil: [ 'while loading ', mcLoaderJobOrNil owner versions asArray asString ])) logCr ]. "Try it loading" Gofer it smalltalkhubUser: 'MartinDias' project: 'AlarmClock'; package: 'AlarmClock'; load.
Hi Martin, Interesting solution but it feels a bit like a hack. For the GTools we made a solution that triggers a custom announcer before and after a Monticello load. We'll make a slice later today. Cheers, Andrei On Thu, Dec 3, 2015 at 3:46 PM, Martin Dias <tinchodias@gmail.com> wrote:
Hi,
Doru asked me how does Epicea listen this information, and I created a snippet to demo it *in a plain Pharo 5 image* (no need to load Epicea before). Maybe somebody else is interested, that's why I share it with everybody.
You can open a Transcript and evaluate the following snippet. After evaluation, you can add new methods in Nautilus and see the log in the Transcript. (The code is not very nice).
Cheers, Martin
"Listen load start" Job jobAnnouncer when: JobStart do: [ :aJobStart | | owner | owner := aJobStart job owner.
(owner isKindOf: MCVersionLoader) ifTrue: [ ('Starting to load ', owner versions asArray asString) logCr ] ]. "Listen load end" Job jobAnnouncer when: JobEnd do: [ :aJobEnd | | owner | owner := aJobEnd job owner.
(owner isKindOf: MCVersionLoader) ifTrue: [ ('Ending to load ', owner versions asArray asString) logCr ] ].
"Listen changes in the middle" SystemAnnouncer uniqueInstance when: MethodAdded do: [ :aMethodAdded | | mcLoaderJobOrNil | mcLoaderJobOrNil := Job current ifNil: [ nil ] ifNotNil: [ :currentJob | currentJob lookup: [ :job | job owner isKindOf: MCVersionLoader ] ifNone: [ nil ] ]. (aMethodAdded methodAdded printString, ' --- ', (mcLoaderJobOrNil ifNil: [ 'no info' ] ifNotNil: [ 'while loading ', mcLoaderJobOrNil owner versions asArray asString ])) logCr ].
"Try it loading" Gofer it smalltalkhubUser: 'MartinDias' project: 'AlarmClock'; package: 'AlarmClock'; load.
Hi, A fix is now available that uses custom announcements to signal the start/end of a monticello version load (MCVersionLoaderStartAnnouncement, MCVersionLoaderStopAnnouncement) A review is required: https://pharo.fogbugz.com/f/cases/17186 Cheers, Andrei On Fri, Dec 4, 2015 at 1:52 PM, Andrei Chis <chisvasileandrei@gmail.com> wrote:
Hi Martin,
Interesting solution but it feels a bit like a hack. For the GTools we made a solution that triggers a custom announcer before and after a Monticello load. We'll make a slice later today.
Cheers, Andrei
On Thu, Dec 3, 2015 at 3:46 PM, Martin Dias <tinchodias@gmail.com> wrote:
Hi,
Doru asked me how does Epicea listen this information, and I created a snippet to demo it *in a plain Pharo 5 image* (no need to load Epicea before). Maybe somebody else is interested, that's why I share it with everybody.
You can open a Transcript and evaluate the following snippet. After evaluation, you can add new methods in Nautilus and see the log in the Transcript. (The code is not very nice).
Cheers, Martin
"Listen load start" Job jobAnnouncer when: JobStart do: [ :aJobStart | | owner | owner := aJobStart job owner.
(owner isKindOf: MCVersionLoader) ifTrue: [ ('Starting to load ', owner versions asArray asString) logCr ] ]. "Listen load end" Job jobAnnouncer when: JobEnd do: [ :aJobEnd | | owner | owner := aJobEnd job owner.
(owner isKindOf: MCVersionLoader) ifTrue: [ ('Ending to load ', owner versions asArray asString) logCr ] ].
"Listen changes in the middle" SystemAnnouncer uniqueInstance when: MethodAdded do: [ :aMethodAdded | | mcLoaderJobOrNil | mcLoaderJobOrNil := Job current ifNil: [ nil ] ifNotNil: [ :currentJob | currentJob lookup: [ :job | job owner isKindOf: MCVersionLoader ] ifNone: [ nil ] ]. (aMethodAdded methodAdded printString, ' --- ', (mcLoaderJobOrNil ifNil: [ 'no info' ] ifNotNil: [ 'while loading ', mcLoaderJobOrNil owner versions asArray asString ])) logCr ].
"Try it loading" Gofer it smalltalkhubUser: 'MartinDias' project: 'AlarmClock'; package: 'AlarmClock'; load.
participants (2)
-
Andrei Chis -
Martin Dias