Administrator
|
Not complaining at all and appreciate everyone's hard (mostly-unpaid) work,
but providing raw feedback in case it's helpful... - Browser awkward: filters disappear whenever left selection changed; no multi-select of sessions, which led to a host of difficulties described below. - What is the heuristic to find API access points? Epicea package has no comment, 'Browser' tag doesn't seem to have an XyzBrowser class, no particular class in the 'Model' tag jumps out at me as an access point; as above Browser about text not set. I finally bring up Morphic halos on the browser and after flopping around, find subclasses of EpLogNode; I browse it and find EpLogNodeGraphModel, which sounds interesting and turns out to be a spec. I figure out how to list the log files, but not how to get the entries - I was expecting a term like that and the relevant method (#log it turns out) has no comment to indicate it's what I'm looking for. Now that I'm starting to understand the project organization, back to the browser to explore EpUnifiedBrowserModel. After a bit of poking around, I suspect (correctly) that #log is what I'm after. Based on code I extract from the browsers and a bit of experimenting in GT, I come up with the following seemingly very complex script: nodes := EpFileLogNode fromAllLogsIn: EpMonitor current sessionStore baseLocator. nodes do: [ :node | node populateReferencedNodesWith: nodes ]. nodes flatCollect: [ :n | n log events select: [ :e | e affectedPackageName beginsWith: 'Magritte' ] ] I now run into a series of problems because, although EpCodeChange declares #affectedPackageName as an abstract method, not all events are EpCodeChanges. I exclude EpUndos. Easy enough. Now I come to an EpGenericRefactoring. This one is harder because p.s. <rant>Code names for internal projects seem extremely counterproductive. Hiedra tells me absolutely nothing about functionality. It might as well be called XyzWidgetThing</rant> ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Cheers,
Sean |
Administrator
|
In case it helps anyone in the future, here is the "poor man's" browser I
hacked together to find all Magritte changes that needed to be rescued from an image where those changes got out-of-sync so I couldn't use Iceberg: nodes := EpFileLogNode fromAllLogsIn: EpMonitor current sessionStore baseLocator. relevantNodes := nodes reject: [ :n | (n globalName endsWith: 'g3') or: [ n globalName endsWith: 'ng' ] ]. relevantNodes do: [ :node | node populateReferencedNodesWith: relevantNodes ]. entries := relevantNodes flatCollect: [ :n | n log entries ]. filter := EpAndFilter withAll: { EpImpactCodeChangeFilter new environment: self class environment; yourself. EpPluggableFilter new condition: [ :e | e content isCodeChange and: [ e content affectedPackageName beginsWith: 'Magritte' ] ]. EpPluggableFilter noTriggerFilter }. filteredEntries := entries select: [ :e | filter accepts: e ]. filteredEntries sort: [ :a :b | (a tagAt: #time) > (b tagAt: #time) ]. groups := filteredEntries groupedBy: [ :e | (e content respondsTo: #methodAffected) ifFalse: [ '?' ] ifTrue: [ e content methodAffected ] ]. events := groups collect: [ :col | col first content ] as: OrderedCollection. events collect: [ :e | "{ e." DiffModel new showOptions: true; leftText: (e accept: EpOldStateVisitor new); rightText: (e accept: EpNewStateVisitor new); contextClass: e class; buildWithSpec "}" ]. ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Cheers,
Sean |
Thanks sean for the feedback
Now pay attention that we cannot digest fast non PRs because we are super busy with P8 alpha. Can you open an issue so that martin can get an idea of what should be improved? Stef > On 18 Aug 2019, at 21:41, Sean P. DeNigris <[hidden email]> wrote: > > In case it helps anyone in the future, here is the "poor man's" browser I > hacked together to find all Magritte changes that needed to be rescued from > an image where those changes got out-of-sync so I couldn't use Iceberg: > > nodes := EpFileLogNode fromAllLogsIn: EpMonitor current sessionStore > baseLocator. > relevantNodes := nodes reject: [ :n | (n globalName endsWith: 'g3') or: [ n > globalName endsWith: 'ng' ] ]. > relevantNodes do: [ :node | node populateReferencedNodesWith: relevantNodes > ]. > entries := relevantNodes flatCollect: [ :n | n log entries ]. > filter := EpAndFilter withAll: { > EpImpactCodeChangeFilter new environment: self class environment; yourself. > EpPluggableFilter new condition: [ :e | > e content isCodeChange and: [ > e content affectedPackageName beginsWith: 'Magritte' ] ]. > EpPluggableFilter noTriggerFilter }. > filteredEntries := entries select: [ :e | filter accepts: e ]. > filteredEntries sort: [ :a :b | (a tagAt: #time) > (b tagAt: #time) ]. > groups := filteredEntries groupedBy: [ :e | (e content respondsTo: > #methodAffected) ifFalse: [ '?' ] ifTrue: [ e content methodAffected ] ]. > events := groups collect: [ :col | col first content ] as: > OrderedCollection. > events collect: [ :e | "{ e." DiffModel new > showOptions: true; > leftText: (e accept: EpOldStateVisitor new); > rightText: (e accept: EpNewStateVisitor new); > contextClass: e class; > buildWithSpec "}" ]. > > > > ----- > Cheers, > Sean > -- > Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html > |
In reply to this post by Sean P. DeNigris
Are you in P8?
Stef > On 18 Aug 2019, at 21:21, Sean P. DeNigris <[hidden email]> wrote: > > Not complaining at all and appreciate everyone's hard (mostly-unpaid) work, > but providing raw feedback in case it's helpful... > > - Browser awkward: filters disappear whenever left selection changed; no > multi-select of sessions, which led to a host of difficulties described > below. > - What is the heuristic to find API access points? Epicea package has no > comment, 'Browser' tag doesn't seem to have an XyzBrowser class, no > particular class in the 'Model' tag jumps out at me as an access point; as > above Browser about text not set. I finally bring up Morphic halos on the > browser and after flopping around, find subclasses of EpLogNode; I browse it > and find EpLogNodeGraphModel, which sounds interesting and turns out to be a > spec. I figure out how to list the log files, but not how to get the entries > - I was expecting a term like that and the relevant method (#log it turns > out) has no comment to indicate it's what I'm looking for. Now that I'm > starting to understand the project organization, back to the browser to > explore EpUnifiedBrowserModel. After a bit of poking around, I suspect > (correctly) that #log is what I'm after. > > Based on code I extract from the browsers and a bit of experimenting in GT, > I come up with the following seemingly very complex script: > > nodes := EpFileLogNode fromAllLogsIn: EpMonitor current sessionStore > baseLocator. > nodes do: [ :node | node populateReferencedNodesWith: nodes ]. > nodes flatCollect: [ :n | n log events select: [ :e | e affectedPackageName > beginsWith: 'Magritte' ] ] > > I now run into a series of problems because, although EpCodeChange declares > #affectedPackageName as an abstract method, not all events are > EpCodeChanges. I exclude EpUndos. Easy enough. Now I come to an > EpGenericRefactoring. This one is harder because > > p.s. <rant>Code names for internal projects seem extremely > counterproductive. Hiedra tells me absolutely nothing about functionality. > It might as well be called XyzWidgetThing</rant> > > > > ----- > Cheers, > Sean > -- > Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html > |
Administrator
|
In reply to this post by ducasse
Done: https://github.com/pharo-project/pharo/issues/4496 https://github.com/pharo-project/pharo/issues/4495 ----- Cheers, Sean -- Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html
Cheers,
Sean |
Free forum by Nabble | Edit this page |