[ANN] Monticllo Update

Keith Hodges keith_hodges at yahoo.co.uk
Fri May 11 05:50:22 UTC 2007


I have been fiddling with monticello for an intense couple of days, and 
now I think it works as I always wish it should have done!

For a Monticello revolution check out this version in 
http://www.squeaksource.com/mc

Summary:

* This version for 3.9/3.10 supports pseudo-atomic loading.
* now up to date with fixes from all over the place.
* now supports out-of-order package loading.
* now supports safe package removal
    i.e. unloading a package does not break other packages.

Caveats: this has not yet been tested with traits

Benefits from the merged version: (should be)

- password manager, does not keep passwords in image.
- ignore the order of class variables
- loading FFI external structures
- copyAll versions from one repository to another
- ui fixes
-- bring the tree for dependent packages back
-- provide more progress information
-- don't scale the toolbar then resizing the monticello browser

Benefits in addition to those in previous versions:
 
    * Dont lose your method extensions!
    * Load/Unload packages to your hearts content.
    * Edit packages even when all their dependents are not present
    * Write packages designed to lie-in-wait to enhance other packages 
when loaded.

enjoy

Keith

-------------------
Details:

I have attempted to merge all of the branches of Monticello and 
PackageInfo that I could find on.

squeaksource/impara/wiresong/squeakfoundation 39a and 310.

This includes latest fixes including the PasswordManager, preamble's 
postambles, support for FFI and the ever so useful copyAll button

It seems also that the impara branch of mc supported the recovery of
overridden methods, any methods which are 'extended' by another package,
and categorized with the '-override' suffix, 'should' not be lost when 
you save a package. (I wish someone had told me about this before!)

Out-of order loading of packages, via a new class MCOrphanage.

This enables a package to 'extend', and 'override' methods in 
not-yet-loaded packages, and to subclass not-yet-loaded subclasses. Not 
yet actually loaded ('orphaned') extensions should also save with the 
package so as not to be lost.

To Do: make this loadable into 3.7 and 3.8, since I am using 3.8
for dev at the moment. See http://bugs.squeak.org/view.php?id=6476

To Do: Test with Traits.

----------
TestSpec

Loading a package uses orphanage for not yet loaded items
Description: When loading a package: Methods and classes which cant load 
go in orphanage. Before loading any package, the orphanage is added to 
the package loader in an attempt to rehome orphans.

Test 1)  out of order loading
step 1)  load package OrphanageTest-Test1
Validation: select .Orphanage and 'Browse', there should be 4 orphans in 
total comrising 2 extension methods, awaiting a class, and one class 
awaiting a superclass, and one method of this class.
step 2) load package OrphanageTest-Test2
Validation: .Orphanage should contain only 1 extension method awaiting a 
class. System categories 'OrphanageTest-Test1' and 'OrphanageTest-Test2' 
should be populated with the packages.

Test 2) As test 1, but test loading in reverse order.

Unloading package remembers to take orphans as well, and mop up
When unloading a package: Methods and classes which are in the orphanage 
for that package need to be removed as well.

When a package unloads its classes from the image it removes its own 
methods, but not its extension methods belonging to other packages, 
these need to be mopped up and placed in the orphanage so they are not 
lost.

Classes left without a superclass remain in the image, but the orphanage 
has a class definiton added, ready to relink the class with its 
superclass should it be reloaded.

When browsing or saving, the definitions of such classes should not 
include the 'AnObsolete' prefix. These classes remain in the image and 
can be modified, and remain part of the package as normal.

Testing package removal
Test 1) package removal - simple case
step 1) load package OrphanageTest-Test1
step 2) unload package OrphanageTest-Test1
Validation: .Orphanage and system category 'OrphanageTest-Test1' should 
be empty.

Test 2) package removal - complex case
step 1) load package OrphanageTest-Test1 (extends Tests 2 and 3)
step 2) load package OrphanageTest-Test2 (extends Tests 1)
step 3) unload package OrphanageTest-Test2
Validation: This should leave 2 orphaned extension methods awaiting 
their classes, one to OrphanageTest2, the other to OrphanageTest3, there 
should also be a class definition for the 'redefinition' of the now 
obsolete-but-still-present-in-the-image OrphanageTest2Subclass

The system does not return to the exact same state as after step 1, 
because the class OrphanageTest2Subclass having lost its superclass is 
now superclassed by AnObsoleteOrphanageTest2.
Validation 2: Browse the remaining OrphanageTest-Test1 to confirm that 
the class is depicted without the 'AnObsolete' prefix.
Validation 2: Select the package click 'Changes' to verify that the 
package is unchanged from the package in the repository.

Test2b) Reload OrphanageTest-Test2
Validate: OrphanageTest2Subclass now has OrphanageTest2 as a superclass.
and OrphanageTest2 now has OrphanageTest2Subclass in its subclasses.

Test2c) Unload and Reload OrphanageTest-Test2
Validate that state is similar to Test 2b)

 



More information about the Squeak-dev mailing list