Andreas Raab uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-ar.321.mcz
==================== Summary ====================
Name: Monticello-ar.321 Author: ar Time: 30 August 2009, 8:35:22 am UUID: dedee780-04ae-e84a-8e6c-0947f7a24780 Ancestors: Monticello-tfel.320
Adds a workaround for the broken 'atomic' loading behavior in MCPackageLoader>>basicLoad.
=============== Diff against Monticello-tfel.320 ===============
Item was changed: ----- Method: MCPackageLoader>>basicLoad (in category 'private') ----- basicLoad errorDefinitions := OrderedCollection new. + [[ + + "FIXME. Do a separate pass on loading class definitions as the very first thing. + This is a workaround for a problem with the so-called 'atomic' loading (you wish!!) + which isn't atomic at all but mixes compilation of methods with reshapes of classes. + + Since the method is not installed until later, any class reshape in the middle *will* + affect methods in subclasses that have been compiled before. There is probably + a better way of dealing with this by ensuring that the sort order of the definition lists + superclass definitions before methods for subclasses but I need this NOW, and adding + an extra pass ensures that methods are compiled against their new class definitions." + + additions do: [:ea | self loadClassDefinition: ea] displayingProgress: 'Loading classes...'. + + additions do: [:ea | self tryToLoad: ea] displayingProgress: 'Compiling methods...'. - [[additions do: [:ea | self tryToLoad: ea] displayingProgress: 'Loading...'. removals do: [:ea | ea unload] displayingProgress: 'Cleaning up...'. self shouldWarnAboutErrors ifTrue: [self warnAboutErrors]. errorDefinitions do: [:ea | ea addMethodAdditionTo: methodAdditions] displayingProgress: 'Reloading...'. methodAdditions do: [:each | each installMethod]. methodAdditions do: [:each | each notifyObservers]. additions do: [:ea | ea postloadOver: (self obsoletionFor: ea)] displayingProgress: 'Initializing...'] on: InMidstOfFileinNotification do: [:n | n resume: true]] ensure: [self flushChangesFile]!
Item was added: + ----- Method: MCPackageLoader>>loadClassDefinition: (in category 'private') ----- + loadClassDefinition: aDefinition + [aDefinition isClassDefinition ifTrue:[aDefinition load]] on: Error do: [errorDefinitions add: aDefinition].!
squeak-dev@lists.squeakfoundation.org