Hello, I finally found some time to work on the package browser. Screenshots and download are available on http://smallwiki.unibe.ch/monticellopackagebrowser/
Here is a small report for this version:
What is new in this version: ---------------------------
-A comment can be assigned to a package (of course, they are saved and retrieved), however the GUI is not well supported. -Running test unit classes (it is not related to packages, but this is quite useful).
Tentative Roadmap: -----------------
0.6 - GUI Prerequisite support for prerequisite packages 0.7 - Optimizations (Omnibrowser is a a bit slow, I need to dive into it) 0.8 - Support for package refactorings (fusion of two packages, fading a package into the system, divide a package into smaller pieces, ...) 0.9 - Binary support for packages. 1.0 - Squeak 4.0
Purpose of the project: -----------------------
Having one self contain package related tool -Packages are First class Entities, it make simpler operations such as renaming, refactoring (fusion of two packages), analysis, ... -Package related Information like class extension are quickly rendered. You can browse extension of the Package without waiting for dozen of seconds. Just to browse extension of the System package, about 40 seconds on my computer to find out that System extends Object, Behavior and ClassDescription with 5 methods. With the MonticelloPackageBrowser, it is instantaneous. -Packages are commented -Compatible with the PackageInfo naming convention (*mypackage-), therefore your project will be still loadable in a old image. -People who does not care about modules at all (e.g., if they prefer ChangeSets) will not notice any difference. -Load, save, repository management, get package information (e.g., class extensions) from within a single tool.
Any feedback appreciated...
Cheers, Alexandre
Alexander: I wish try your work. On Squeak3.8-6665.image full I load Omnibrowser and Monticello and add your repository. At Load Packages-XX.YY.mcz , I'm not sure what means, so I decides load all packages starting from 2. When loading 6 , I got the attached walkback. Could you help ? I start loading the ready-to-use image now, but I wish know
Edgar
Sorry, it is true that it is not really explicit. You should load the last version, 36. Therefore, look for Package-ab.36.mcz
Once loaded, execute in a workspace: Package bootstrap
And open a Package Browser from the world menu.
Thanks for trying, Alexandre
On Sat, Jul 09, 2005 at 07:12:10AM -0300, Lic. Edgar J. De Cleene wrote:
Alexander: I wish try your work. On Squeak3.8-6665.image full I load Omnibrowser and Monticello and add your repository. At Load Packages-XX.YY.mcz , I'm not sure what means, so I decides load all packages starting from 2. When loading 6 , I got the attached walkback. Could you help ? I start loading the ready-to-use image now, but I wish know
Edgar
Error: key not found
9 July 2005 7:04:23 am
VM: Mac OS - a SmalltalkImage Image: Squeak3.8 [latest update: #6665]
SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir Discovery:Users:admin:Public:SqueakDevelop:Squeak3.8-6665full Trusted Dir Discovery:Users:admin:Public:SqueakDevelop:Squeak3.8-6665full Untrusted Dir foobar:tooBar:forSqueak:bogus
MethodDictionary(Object)>>error: Receiver: a MethodDictionary(#actions->a CompiledMethod (2141) #addNewPackage->a CompiledMethod (933...etc... Arguments and temporary variables: aString: 'key not found' Receiver's instance variables: tally: 29 array: #(a CompiledMethod (773) a CompiledMethod (3138) a CompiledMethod (907) ...etc...
MethodDictionary(Dictionary)>>errorKeyNotFound Receiver: a MethodDictionary(#actions->a CompiledMethod (2141) #addNewPackage->a CompiledMethod (933...etc... Arguments and temporary variables:
Receiver's instance variables: tally: 29 array: #(a CompiledMethod (773) a CompiledMethod (3138) a CompiledMethod (907) ...etc...
[] in MethodDictionary(Dictionary)>>at: {[self errorKeyNotFound]} Arguments and temporary variables: key: #isDescendantOfClassCat:
MethodDictionary>>at:ifAbsent: Receiver: a MethodDictionary(#actions->a CompiledMethod (2141) #addNewPackage->a CompiledMethod (933...etc... Arguments and temporary variables: key: #isDescendantOfClassCat: aBlock: [] in MethodDictionary(Dictionary)>>at: {[self errorKeyNotFound]} index: 62 Receiver's instance variables: tally: 29 array: #(a CompiledMethod (773) a CompiledMethod (3138) a CompiledMethod (907) ...etc...
--- The full stack --- MethodDictionary(Object)>>error: MethodDictionary(Dictionary)>>errorKeyNotFound [] in MethodDictionary(Dictionary)>>at: {[self errorKeyNotFound]} MethodDictionary>>at:ifAbsent: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MethodDictionary(Dictionary)>>at: OBPackageNode class(Behavior)>>compiledMethodAt: MethodReference>>compiledMethod MCMethodDefinition class>>forMethodReference: MethodReference>>asMethodDefinition [] in MCPackage>>snapshot {[:ea | definitions add: ea asMethodDefinition]} [] in OrderedCollection(SequenceableCollection)>>do:displayingProgress: {[:each :i | bar value: i. aBlock value: each]} OrderedCollection(SequenceableCollection)>>withIndexDo: [] in OrderedCollection(SequenceableCollection)>>do:displayingProgress: {[:bar | self withIndexDo: [:each :i | bar value: i. aBlock value: e...]} [] in ProgressInitiationException>>defaultMorphicAction {[result := workBlock value: progress]} BlockContext>>ensure: ProgressInitiationException>>defaultMorphicAction ProgressInitiationException>>defaultAction UndefinedObject>>handleSignal: MethodContext(ContextPart)>>handleSignal: ProgressInitiationException(Exception)>>signal ProgressInitiationException>>display:at:from:to:during: ProgressInitiationException class>>display:at:from:to:during: ByteString(String)>>displayProgressAt:from:to:during: OrderedCollection(SequenceableCollection)>>do:displayingProgress: MCPackage>>snapshot MCPackageLoader>>updatePackage:withSnapshot: [] in MCVersionLoader>>load {[:ea | loader updatePackage: ea package withSnapshot: ea snapshot]} OrderedCollection>>do: MCVersionLoader>>load MCVersionLoader class>>loadVersion: MCVersion>>load MCFileRepositoryInspector(MCVersionInspector)>>load MCFileRepositoryInspector>>load MCFileRepositoryInspector(MCTool)>>performButtonAction:enabled: PluggableButtonMorph>>performAction [] in PluggableButtonMorph>>mouseUp: {[:m | (m containsPoint: evt cursorPoint) ifTrue: [m performAction]]} Array(SequenceableCollection)>>do: PluggableButtonMorph>>mouseUp: PluggableButtonMorph(Morph)>>handleMouseUp: MouseButtonEvent>>sentTo: PluggableButtonMorph(Morph)>>handleEvent: PluggableButtonMorph(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self. ActiveEvent := anEvent. result := focusHolder han...]} [] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]} BlockContext>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} Array(SequenceableCollection)>>do: ...etc...
squeak-dev@lists.squeakfoundation.org