Hi all,
My main headache with STORE is the lack of relationship between classes
and methods.
In ENVY, I could easily browse versions of a class to see when particular
methods were added or removed.
How can I do this in STORE?
Versions of a class in STORE seem to only keep track of class
definition changes.
I posted this question on comp.lang.smalltalk and got a couple of replies
but they dont quite solve my problem.
thanks for any help.
Kimberly
This e-mail and any files transmitted with it contain confidential and privileged information intended solely for the use of the individual to whom they are addressed. If you received this e-mail in error please inform the sender and delete it. You may not use/distribute or copy it or take any action as a consequence of its content. Recipients are reminded that e-mail is an insecure communication medium and we accept no responsibility for any losses, incurred as a result of fictitious or falsified messages. If in doubt recipients should take action to verify the authenticity of any message received. This footnote also confirms that this e-mail message has been swept by MIMEsweeper for the presence of computer viruses. E-mails and their contents can be monitored. RMB Investment Services Limited is licensed by the Guernsey Financial Services Commission to conduct Investment Business. A member of the FirstRand Group This email and all content are subject to the following disclaimer: http://content.momentum.co.za/content/legal/disclaimer_email.htm |
well, the closest thing to that is something that is at least not quite
ready in my 7.4 image but perhaps already working in the public repository. I believe its the Glorp framework or probably rather the StoreForGlorp. A menu option is added to the RB browser namely "(Prototype) Browse Class versions" currently in my image it does take a bit to load all the class versions but once loaded the browser will show you the methods associated to the specific class version, unfortunately I get the following bug when I try to click on a protocol, again this may have been fixed by now. I guess Alan would know. Here is the bug I get: Unhandled exception: BlockClosure [] in Object>>doesNotUnderstand: Glorp.StoreClassExtension(Object)>>doesNotUnderstand: Refactory.CodeHighlighter.CodeHighlightingParser>>findNamespaceFor: Refactory.CodeHighlighter.CodeHighlightingParser>>formatVariableReference: Refactory.CodeHighlighter.CodeHighlightingParser>>reduceActionForPrimary3: Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>performReduceMethod:with: Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>reduce: Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>performAction: Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>performParsingLoop Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>parse optimized [] in Refactory.CodeHighlighter.CodeHighlightingParser class>>formatMethod:forClass:namespace: BlockClosure>>on:do: Refactory.CodeHighlighter.CodeHighlightingParser class>>formatMethod:forClass:namespace: optimized [] in Refactory.CodeHighlighter.HighlightingTextEditorController>>startHighlighting: BlockClosure>>on:do: optimized [] in Process class>>forBlock:priority: ---------------------------------------------------------------------- Glorp.StoreClassExtension(Object)>>doesNotUnderstand: Receiver: a Glorp.StoreClassExtension Instance Variables: organization = ('database retrieval - Stats') ('view management') ('port VW3.0') ('initialize-release') ('database updates') ('model massaging') ('startup-shutdown') ('profile processing') ('accessing') ('database retrieval - Gen') ('database retrieval') ('database retrieval - Upd') classDefinition = (StoreClassDefinition(Root.Smalltalk.DsDbInterface) in {StorePackage(TradeBlazer - Main Classes,1.65.17)}) classMethods = an IdentitySet[28] name = '1.65.17' longName = '1.65.17' package = StorePackage(TradeBlazer - Main Classes,1.65.17) instanceMethods = an IdentitySet[214] metaclass = nil sharedVariables = an IdentitySet[0] Arguments: aMessage = a Message with selector: #environment and arguments: #() Temporaries: excpt = a MessageNotUnderstood resumeValue = nil Context PC = 25 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser>>findNamespaceFor: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Arguments: aBindingReference = #{selector} Temporaries: isAbsolute = false pathString = 'selector' home = nil Context PC = 37 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser>>formatVariableReference: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Arguments: aSmaCCToken = {selector(9,16,#(20))} Temporaries: ref = #{selector} binding = nil Context PC = 112 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser>>reduceActionForPrimary3: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Arguments: nodes = an OrderedCollection[1] Context PC = 7 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>performReduceMethod:with: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Arguments: aSymbol = #reduceActionForPrimary3: items = an OrderedCollection[1] Context PC = 13 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>reduce: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Arguments: anInteger = 58 Temporaries: reduceEntry = an Array[3] items = an OrderedCollection[1] size = 1 Context PC = 49 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>performAction: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Arguments: action = 234 Temporaries: value = 58 actionType = 2 Context PC = 38 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>performParsingLoop Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Temporaries: action = 234 Context PC = 20 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser(Refactory.SmaCC.SmaCCParser)>>parse Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser Instance Variables: scanner = a Refactory.CodeHighlighter.CodeHighlightingScanner currentToken = {and(18,20,#(20))} errorToken = nil stateStack = an OrderedCollection[3] nodeStack = an OrderedCollection[2] text = Text for 'message selector and argument...variable names | statements' string = 'message selector and argument...variable names | statements' class = 1.65.17 temps = an OrderedCollection[0] args = an OrderedCollection[0] blockArgs = an OrderedCollection[0] namespace = nil Context PC = 7 ---------------------------------------------------------------------- optimized [] in Refactory.CodeHighlighter.CodeHighlightingParser class>>formatMethod:forClass:namespace: Receiver: an UndefinedObject Temporaries: .parser = a Refactory.CodeHighlighter.CodeHighlightingParser Context PC = 5 ---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in Refactory.CodeHighlighter.CodeHighlightingParser class>>formatMethod:forClass:namespace: outerContext = nil copiedValues = a Refactory.CodeHighlighter.CodeHighlightingParser Arguments: anExceptionSelector = Refactory.SmaCC.SmaCCParserError handlerBlock = BlockClosure [] in Refactory.CodeHighlighter.CodeHighlightingParser class>>formatMethod:forClass:namespace: Context PC = 18 ---------------------------------------------------------------------- Refactory.CodeHighlighter.CodeHighlightingParser class>>formatMethod:forClass:namespace: Receiver: a Refactory.CodeHighlighter.CodeHighlightingParser class Instance Variables: superclass = Refactory.SmaCC.SmaCCParser methodDict = a MethodDictionary[144] format = 16396 subclasses = nil instanceVariables = an Array[7] organization = ('private' #actionForCurrentToken #addTemp: #addTemps #findErrorHandlerIfNoneUseErrorNumber: #findNamespaceFor: #isBlockArgument: #isInstanceVariable: #isMethodArgument: #isTemporaryVariable: #isValidMessage:for: #lookupClassFor: #removeTemps) ('initialize-release' #class: #initialize #text:) ('private-error handling' #dismissErrorToken #errorHandlerStates #handleError: #patchErrorHandlerStates:) ('formatting' #formatArrayHash:leftParenthesis:rightParenthesis: #formatArrayLeftBrace:rightBrace: #formatAssignedVariable: #formatAssignment: #formatBinaryMethod:with: #formatBlockArgumentSeparator: #formatBlockVariable:colon: #formatByteArrayHash:leftBracket:rightBracket: #formatCascade: #formatCharacter: #formatComment: #formatFalse: #formatFrom:to:with: #formatKeyword:with: #formatLeftBracket: #formatLeftParenthesis: #formatMessage:to: #formatMethodArgument: #formatNil: #formatNumber: #formatPeriod: #formatPrimitiveFrom:to: #formatQualifiedReferenceHash:leftBrace:rightBrace: #formatReturn: #formatRightBracket: #formatRightParenthesis: #formatSelf: #formatString: #formatSuper: #formatSymbol:hash: #formatSyntaxError #formatSyntaxErrorFrom:to: #formatTemporaryVariable: #formatToken:with: #formatTrue: #formatUnaryMethod: #formatVariableReference:) ('accessing' #namespace #namespace:) ('generated-reduction actions' #reduceActionForArray4: #reduceActionForBinaryMessage1: #reduceActionForBinaryMessageSend1: #reduceActionForBinaryMessageSend2: #reduceActionForBinaryMessageSend3: #reduceActionForBinaryMethodName1: #reduceActionForBlock1: #reduceActionForBlock2: #reduceActionForBlock3: #reduceActionForBlock4: #reduceActionForBlockArgs1: #reduceActionForBlockArgs2: #reduceActionForCascade1: #reduceActionForCascade2: #reduceActionForCascade3: #reduceActionForCascadeList1: #reduceActionForCascadeList2: #reduceActionForExpression1: #reduceActionForExpression2: #reduceActionForKeywordMessage1: #reduceActionForKeywordMessage2: #reduceActionForKeywordMessageSend1: #reduceActionForKeywordMessageSend2: #reduceActionForKeywordMessageSend3: #reduceActionForKeywordMethodName1: #reduceActionForKeywordMethodName2: #reduceActionForKeywordMethodName3: #reduceActionForLiteral10: #reduceActionForLiteral11: #reduceActionForLiteral12: #reduceActionForLiteral13: #reduceActionForLiteral14: #reduceActionForLiteral15: #reduceActionForLiteral16: #reduceActionForLiteral17: #reduceActionForLiteral1: #reduceActionForLiteral2: #reduceActionForLiteral3: #reduceActionForLiteral4: #reduceActionForLiteral5: #reduceActionForLiteral6: #reduceActionForLiteral7: #reduceActionForLiteral8: #reduceActionForLiteral9: #reduceActionForMethodSequenceNode1: #reduceActionForObjectStudioArray4: #reduceActionForOptional_____1: #reduceActionForOptional_____2: #reduceActionForPrimary1: #reduceActionForPrimary2: #reduceActionForPrimary3: #reduceActionForPrimary4: #reduceActionForPrimary5: #reduceActionForPrimitiveMessageSend10: #reduceActionForPrimitiveMessageSend11: #reduceActionForPrimitiveMessageSend2: #reduceActionForPrimitiveMessageSend3: #reduceActionForPrimitiveMessageSend4: #reduceActionForPrimitiveMessageSend5: #reduceActionForPrimitiveMessageSend6: #reduceActionForPrimitiveMessageSend7: #reduceActionForPrimitiveMessageSend8: #reduceActionForPrimitiveMessageSend9: #reduceActionForPrimitives2: #reduceActionForPrimitives3: #reduceActionForSequenceNode1: #reduceActionForSimpleMessage1: #reduceActionForSimpleMessage2: #reduceActionForSimpleMessage3: #reduceActionForStatementList2: #reduceActionForStatementList3: #reduceActionForStatements2: #reduceActionForStatements3: #reduceActionForStatements4: #reduceActionForStatements5: #reduceActionForStatements6: #reduceActionForTemporaries1: #reduceActionForTemporaries2: #reduceActionForTemporaryVariables1: #reduceActionForTemporaryVariables2: #reduceActionForUnaryMessage1: #reduceActionForUnaryMessageSend1: #reduceActionForUnaryMessageSend2: #reduceActionForUnaryMethodName1:) ('generated-tables' #reduceTable #transitionTable) name = #CodeHighlightingParser classPool = a NameSpaceOfClass[0] environment = a NameSpace[5] stylesToRemove = an Array[37] styles = nil Arguments: aText = Text for 'message selector and argument...variable names | statements' aClass = 1.65.17 aNamespace = nil Temporaries: parser = a Refactory.CodeHighlighter.CodeHighlightingParser Context PC = 34 ---------------------------------------------------------------------- optimized [] in Refactory.CodeHighlighter.HighlightingTextEditorController>>startHighlighting: Receiver: an UndefinedObject Temporaries: win = nil event = nil .delay = 0 .self = a Refactory.CodeHighlighter.HighlightingTextEditorController .localText = Text for 'message selector and argument...variable names | statements' .class = 1.65.17 .namespace = nil .uiPriority = 50 Context PC = 23 ---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in Refactory.CodeHighlighter.HighlightingTextEditorController>>startHighlighting: outerContext = nil copiedValues = an Array[6] Arguments: anExceptionSelector = TerminateException handlerBlock = BlockClosure [] in [] in Process class>>forBlock:priority: Context PC = 18 ---------------------------------------------------------------------- optimized [] in Process class>>forBlock:priority: Receiver: an UndefinedObject Temporaries: .aBlock = BlockClosure [] in Refactory.CodeHighlighter.HighlightingTextEditorController>>startHighlighting: Context PC = 9 On Tue, 29 Aug 2006 09:44:19 -0400, Anderson, Kimberly <[hidden email]> wrote: > > Hi all, > My main headache with STORE is the lack of relationship between classes > and methods. > In ENVY, I could easily browse versions of a class to see when > particular methods were added or removed. > How can I do this in STORE? > Versions of a class in STORE seem to only keep track of class definition > changes. > I posted this question on comp.lang.smalltalk and got a couple of > replies but they dont quite solve my problem. > thanks for any help. > Kimberly > > > This e-mail and any files transmitted with it contain confidential and > privileged information intended solely for the use of the individual to > whom they are addressed. > > If you received this e-mail in error please inform the sender and delete > it. You may not use/distribute or copy it or take any action as a > consequence of its content. > > Recipients are reminded that e-mail is an insecure communication medium > and we accept no responsibility for any losses, incurred as a result of > fictitious or falsified messages. If in doubt recipients should take > action to verify the authenticity of any message received. > > This footnote also confirms that this e-mail message has been swept by > MIMEsweeper for the presence of computer viruses. E-mails and their > contents can be monitored. > > RMB Investment Services Limited is licensed by the Guernsey Financial > Services Commission to conduct Investment Business. > > A member of the FirstRand Group > > This email and all content are subject to the following disclaimer: > > http://content.momentum.co.za/content/legal/disclaimer_email.htm > > -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/ |
At 11:40 AM 8/29/2006, Charles A. Monteiro wrote:
>well, the closest thing to that is something that is at least not quite >ready in my 7.4 image but perhaps already working in the public repository. > >I believe its the Glorp framework or probably rather the StoreForGlorp. A >menu option is added to the RB browser namely "(Prototype) Browse Class >versions" > >currently in my image it does take a bit to load all the class versions >but once loaded the browser will show you the methods associated to the >specific class version, unfortunately I get the following bug when I try >to click on a protocol, again this may have been fixed by now. I guess >Alan would know. I haven't tried it in 7.4 lately. In 7.4.1 there seems to be a bug with the distribution version that it doesn't pre-read the source, and it disconnects the session, so you get a walkback clicking on the method. But if you load the latest versions of GlorpVWPort, Glorp, and StoreGlorp from the public repository it should work. It's also very prototype-quality. Lots of browser options won't work, and it can be quite slow, depending on the database and the particular class. But I do find it quite useful anyway. -- Alan Knight [|], Cincom Smalltalk Development [hidden email] [hidden email] http://www.cincom.com/smalltalk "The Static Typing Philosophy: Make it fast. Make it right. Make it run." - Niall Ross |
In reply to this post by Anderson, Kimberly
concerning migrating from ENVY to Store
I faced following problems: 1) Store doesn't support "automatic on-line" mode, when all changes are stored in repository (e.g. all accepted methods) only manual publishing is possible 2) Store doesn't support versions of classes, only whole packages are units of repository it can be seen as a lack of granularity 3) comparing history doesn't support hierarchy no hierarchical view of changes in bundles,packages 4) comparing 2 selected versions is complicated select one then select "compare with" then select another from list is too complicated 5) missing hierarchy of bundles/packages+classes (~Application manager in ENVY) Loaded/Published items are only one-level and standard package browser is not high enough for such a purpose 6) version names are not directly visible 7) no filtering for blessing level, only one-level list hierarchy necessary for mixing scratch/editions/versions 8) no support for export/import of whole history several versions together 9) very slow and manual publishing of "base" at the beginning and complicated by errors 10) Store doesn't support renaming and moving classes (methods) all history is lost 11) only global "garbage collection" choosing particular versions is necessary 12) minor things: - manual switching to "show code differences" - parts of compare window can't be resized I solved some issues by modifying some tools generally I used (1 class - 1 package) principle in order to get what I need (my changes are published as JExpTools in Cincom Public Repository really prototype version - it works unless you are using something that I don't need) what I did: 1) menu Store->Packages like "Application manager" 2) show versions - bundles, packages, classes 3) show only direct classes in bundle 4) colored modified bundles 5) colored versions according to blessing level 6) hiding packages (1 class - 1 package) 7) class menu - add package actions 8) colored modified classes 9) package versions - also image version 10) new class, extension - create package first 11) rename class - rename package first 12) published items - show contents directly (with versions) 13) "on-line" mode - each accept published as scratch .x 14) "unbranching" scratches when publishing manually to be done: 1) hierarchical compare tool 2) migration of complete history from Envy to Store hope it can help at least as an inspiration Jan Lukes Anderson, Kimberly napsal(a):
IMPORTANT: The contents of this email and any attachments are confidential. They are intended for the named recipient(s) only. If you have received this email in error, please notify the system manager or the sender immediately and do not disclose the contents to anyone or make copies thereof. *** eSafe scanned this email for viruses, vandals, and malicious content. *** |
In reply to this post by Anderson, Kimberly
Anderson, Kimberly wrote:
> > My main headache with STORE is the lack of relationship between > classes and methods. > In ENVY, I could easily browse versions of a class to see when > particular methods were added or removed. > How can I do this in STORE? > Versions of a class in STORE seem to only keep track of class > definition changes. When looking at the Published Items list you can 'compare versions' of a package. You can then 'Compare Packages' and see all of the class/method changes. I haven't looked at how it does this but if there isn't already a menu option somewhere for comparing method changes in a class it should be possible to create one using the same techniques cheers Steve A |
Steve Aldred napsal(a):
> Anderson, Kimberly wrote: >> >> My main headache with STORE is the lack of relationship between >> classes and methods. >> In ENVY, I could easily browse versions of a class to see when >> particular methods were added or removed. >> How can I do this in STORE? >> Versions of a class in STORE seem to only keep track of class >> definition changes. > > When looking at the Published Items list you can 'compare versions' of > a package. You can then 'Compare Packages' and see all of the > class/method changes. instead of hierarchy of bundles/packages (in browser) which I would expect it presents just text information (no interaction is possible) highlighting of changes is done just as a text comparing on version names "compare packages" opens separate window for each pair of packages which is completely unusable for larger sets so I'm really missing ENVY-like tool for comparing two versions of application I mean in one browser window: first component - (hierarchy of) subapplications with differences second component - (list of) classes with differences third component - (list of) methods with differences and comparison of method bodies at the bottom Jan Lukes ********************************************************************************************** IMPORTANT: The contents of this email and any attachments are confidential. They are intended for the named recipient(s) only. If you have received this email in error, please notify the system manager or the sender immediately and do not disclose the contents to anyone or make copies thereof. *** eSafe scanned this email for viruses, vandals, and malicious content. *** ********************************************************************************************** |
Free forum by Nabble | Edit this page |