[Pkg] Monticello Public: Monticello.impl-mtf.647.mcz

squeak-dev-noreply at lists.squeakfoundation.org squeak-dev-noreply at lists.squeakfoundation.org
Mon Aug 10 12:54:20 UTC 2009


A new version of Monticello.impl was added to project Monticello Public:
http://www.squeaksource.com/mc/Monticello.impl-mtf.647.mcz

==================== Summary ====================

Name: Monticello.impl-mtf.647
Author: mtf
Time: 10 August 2009, 8:52:13 am
UUID: 5bf7cbb6-f075-46c4-9a72-ae9da5aac6cf
Ancestors: Monticello.impl-damiencassou.646

Gave Monticello the ability to automatically fix underscore assignments if they are an issue, and made syntax error handling in general a bit smarter.

Experimental; not yet tested.
Only works in MC1.5 (MCPackageLoader1b)

=============== Diff against Monticello.impl-damiencassou.646 ===============

Item was changed:
  Object subclass: #MCPackageLoader1b
+ 	instanceVariableNames: 'requirements unloadableDefinitions obsoletions additions removals errorDefinitions modifiedDefinitions provisions isUnloading isMultiplePackage'
- 	instanceVariableNames: 'requirements unloadableDefinitions obsoletions additions removals errorDefinitions provisions isUnloading isMultiplePackage'
  	classVariableNames: ''
  	poolDictionaries: ''
  	category: 'Monticello-Base-Loading'!
  
  !MCPackageLoader1b commentStamp: 'kph 5/25/2007 04:43' prior: 0!
  MCPackageLoader1b - Attempt to improve loading with a number of tricks
  
  In #basicLoad the loading process starts with a collection of definitions 
  in #additions, and another in #removals. #analyse should have sorted these so that 
  dependencies shouldnt cause errors.
  
  The load sequence sent to each addidion is: #preLoadOver: [ #install #postinstall ] #postloadOver:
  The load sequence sent to each removal is                    [ #unload ]
  
  The brackets above mark the fact that the 'load' itself which is perfromed by #install/#postinstall and #unload are performed in a tight loop and this is our attempt at atomicity.
  
  For methods, #preloadOver:, and #postloadOver: obsoletions are supplied, being the original item being overwritten.
  
  InstVar #defn is the currently loading definition. This allows error handlers to know what was being processed when the error occured.
  
  -----
  Note that to support loading this Monicello over a version which does not support atomic loading, soe things have to remain in place that are otherwise obsolete.
  
  MCDefinition-#loadOver:
  MCPackageLoader instVar's errorDefinitions, addtions, removals cant be renamed.
  !

Item was added:
+ ----- Method: MCPackageLoader1b>>warnAboutModifications: (in category 'private') -----
+ warnAboutModifications: modifications
+ 	modifications isEmpty ifFalse: [ self notify: (self modifiedDefinitionWarning: modifications) ]
+ !

Item was added:
+ ----- Method: MCPackageLoader1b>>shouldWarnAboutModifications (in category 'private') -----
+ shouldWarnAboutModifications
+ 	^ true "should make this a preference"!

Item was changed:
  ----- Method: MCMethodDefinition>>ensuredCreateCompiledMethod (in category 'compiling') -----
  ensuredCreateCompiledMethod
  	"Create the compiled method from my source, or from user-provided source in the event of a syntax error"
  
+ 	| newSource |
  	[ self createCompiledMethod ] on: SyntaxErrorNotification do: [ :ex |
+ 		"first, see if it's an underscore issue"
+ 		newSource := FixUnderscores2 new fixUnderscores: source.
+ 		(newSource notNil and: [newSource ~= source]) ifTrue: [
+ 			source := newSource.
+ 			self sourceChangedBecause: 'Convert _ to :='.
+ 			ex retry].
+ 
+ 		"If not, poppup a syntax error dialog"
+ 		ex outer.
- 		"Let the user install the fixed code into the system"
- 		ex defaultAction.
  		"Now fetch and use that code instead"
  		source := theClass sourceCodeAt: self selector ifAbsent: [^ nil].
+ 		self sourceChangedBecause: 'Syntax Error'.
+ 		ex retry]!
- 		self createCompiledMethod]!

Item was changed:
  ----- Method: MCPackageLoader1b>>basicLoad (in category 'private') -----
  basicLoad
    
  	additions do: [:ea | ea preloadOver: (self obsoletionFor: ea).   ] displayingProgress: 'Loading...'.
  		
  	self shouldWarnAboutErrors ifTrue: [ self warnAboutErrors: errorDefinitions ].
  
  	(1 to: 2) do: [:ea |  ] displayingProgress: (self isUnloading ifFalse: [ 'Installing...' ] 
  																ifTrue: [ 'Unloading...' ]).
  	"begin the psuedo atomic bit"		
  	
  	removals do: [:ea | ea unload ].
  	additions do: [:ea | ea install ].
  	additions do: [:ea | ea postinstall ].
  
  	"end the psuedo atomic bit"
   
  	 additions reverse do: [:ea | 
  		
  		ea postloadOver: (self obsoletionFor: ea).
  		self successfullyLoaded: ea.
  
  	] displayingProgress: 'Integration...'.
+ 
+ 	self shouldWarnAboutModifications ifTrue: [self warnAboutModifications: modifiedDefinitions].
  !

Item was added:
+ ----- Method: MCMethodDefinition>>sourceChangedBecause: (in category 'compiling') -----
+ sourceChangedBecause: aString
+ 	self because: aString.
+ 	^ (SourceChangedDuringLoad method: self reason: aString) signal!

Item was added:
+ ----- Method: MCPackageLoader1b>>modifiedDefinitionWarning: (in category 'private') -----
+ modifiedDefinitionWarning: modifiedDefns
+ 	^ String streamContents: [:s |
+ 		s nextPutAll: 'The following definitions were modified during the load. You should review the changes and save the package. Press Proceed to finish loading'; cr.
+ 		modifiedDefns do: [:ea | 
+ 			s space; space; 
+ 			  nextPutAll: ea summary;
+ 			  space; 
+ 			  nextPutAll: (ea because ifNil: [ '' ]); cr]] !

Item was changed:
  ----- Method: MCVersionLoader>>loadWithNameLike: (in category 'loading') -----
  loadWithNameLike: aString
  	| loader |
  	self checkForModifications.
  	loader := MCPackageLoader newCurrent.
  	versions size > 1 ifTrue: [ loader beMultiplePackage ].
  	 
  	versions do: [:ea |
  		ea canOptimizeLoading
  			ifTrue: [ea patch applyTo: loader]
  			ifFalse: [loader updatePackage: ea package withSnapshot: ea snapshot
  			]
  	].
  	loader 	installOrphanage;
  			loadWithNameLike: aString.
+ 	versions do: [:ea | ea workingCopy loaded: ea].
+ 
+ 	loader modifiedDefinitions ifNotEmpty: [
+ 		versions do: [:ea | ea workingCopy modified: true].
+ 		"Since the versions were modified directly, they are stale"
+ 		MCFileBasedRepository flushAllCaches].!
- 	versions do: [:ea | ea workingCopy loaded: ea]!

Item was added:
+ ----- Method: MCPackageLoader1b>>modifiedDefinitions (in category 'public') -----
+ modifiedDefinitions
+ "Answer a list of method definitions whose source was modified as part of the load, due to syntax error or other reasons. Only intended to be called after load"
+ 
+ 	^ modifiedDefinitions!

Item was changed:
  ----- Method: MCPackageLoader1b>>protectedLoad (in category 'private') -----
  protectedLoad
+ 	errorDefinitions := OrderedCollection new.
+ 	modifiedDefinitions := OrderedCollection new.
+ 	[[[[self basicLoad]
+ 		on: InMidstOfFileinNotification do: [:n | n resume: true]]
+ 		ensure: [self flushChangesFile]]
+ 		on: MCOrphanedNotification do: [:ex |
+ 			additions remove: ex orphan ifAbsent: [].
+ 			errorDefinitions add: ex orphan. 
+ 			ex resume]]
+ 		on: SourceChangedDuringLoad do: [:ex |
+ 			modifiedDefinitions add: ex method.
+ 			ex pass]!
- 		errorDefinitions := OrderedCollection new.
-  		[
- 			[
- 				[ self basicLoad ] on: InMidstOfFileinNotification do: [:n |  n resume: true]
- 
- 			] ensure: [self flushChangesFile].
- 		
- 		]  on: MCOrphanedNotification do: [ :ex | additions remove: ex orphan ifAbsent: [].
- 											errorDefinitions add: ex orphan. 
- 									 		ex resume.					  		]
-  !



More information about the Packages mailing list