Chris Muller uploaded a new version of Monticello to project The Trunk: http://source.squeak.org/trunk/Monticello-cmm.560.mcz
==================== Summary ====================
Name: Monticello-cmm.560 Author: cmm Time: 15 August 2013, 4:06:17.456 pm UUID: 10b8124c-656a-43a2-8e7f-d5367bba04f1 Ancestors: Monticello-cmm.559
- The ancestry can be restored from the MCVersion's Info that's loaded in the image, it isn't necessary to restore it from an older file. This means not finding a version to recover ancestry is much less likely to happen. - If it does happen, the user is now given a chance to copy the file back to where it was loaded from and simply Proceed, rather than requiring them to close the debugger and "try again". - Stub the stepChildren too.
=============== Diff against Monticello-cmm.559 ===============
Item was added: + ----- Method: MCAncestry>>stubAncestryFor:using: (in category 'initialize-release') ----- + stubAncestryFor: childInfo using: aMCRepository + "childInfo was retrieved from aMCRepository. Replace my ancestry with a Proxy that can retrieve the full tree from these two elements." + ancestors := ancestors collect: + [ : each | MCInfoProxy + info: each copyWithTrimmedAncestry + child: childInfo + repository: aMCRepository ]. + stepChildren := stepChildren collect: + [ : each | MCInfoProxy + info: each copyWithTrimmedAncestry + child: childInfo + repository: aMCRepository ].!
Item was removed: - ----- Method: MCAncestry>>stubAncestryUsing: (in category 'initialize-release') ----- - stubAncestryUsing: aMCRepository - ancestors := ancestors collect: - [ : each | MCInfoProxy - info: each copyWithTrimmedAncestry - repository: aMCRepository ]!
Item was changed: ProtoObject subclass: #MCInfoProxy + instanceVariableNames: 'info repository childInfo' - instanceVariableNames: 'info repository' classVariableNames: '' poolDictionaries: '' category: 'Monticello-Repositories'!
!MCInfoProxy commentStamp: 'cmm 8/12/2013 21:51' prior: 0! A MCInfoProxy takes the place of a MCVersionInfo with a large tree of ancestors that consume memory in the image, but are almost never accessed. If they are, however, I will dynamically retrieve and become the Info from the original MC repository which includes the full ancestry tree.!
Item was added: + ----- Method: MCInfoProxy class>>info:child:repository: (in category 'create') ----- + info: aMCVersionInfo child: childInfo repository: aMCRepository + ^ self new + + setInfo: aMCVersionInfo + childInfo: childInfo + repository: aMCRepository!
Item was changed: ----- Method: MCInfoProxy>>materializeInfo (in category 'private') ----- materializeInfo + | persistentVersion | + [ (persistentVersion := repository versionWithInfo: childInfo) isNil ] whileTrue: [ Warning signal: 'Please copy ' , childInfo name , 'with id ' , childInfo id asString , ' back to ' , repository asString , ' and try again.' ]. + persistentVersion info allAncestorsDo: + [ : each | each = info ifTrue: [ ^ each ] ]. + nil error: 'Expected ' , info asString , ' to be an ancestor of ' , childInfo asString! - ^ (repository versionWithInfo: info) - ifNil: - [ (MCRepositoryGroup default versionWithInfo: info) - ifNil: [ nil error: 'Please copy ' , info name , 'with id ' , info id asString , ' to ' , repository asString , ' and try again.' ] - ifNotNil: - [ : foundVersion | repository storeVersion: foundVersion. - foundVersion info ] ] - ifNotNil: - [ : version | version info ]!
Item was added: + ----- Method: MCInfoProxy>>setInfo:childInfo:repository: (in category 'initialize-release') ----- + setInfo: aMCVersionInfo childInfo: childMCVersionInfo repository: aMCRepository + info := aMCVersionInfo. + childInfo := childMCVersionInfo. + repository := aMCRepository!
Item was removed: - ----- Method: MCInfoProxy>>setInfo:repository: (in category 'initialize-release') ----- - setInfo: aMCVersionInfo repository: aMCRepository - info := aMCVersionInfo. - repository := aMCRepository!
Item was changed: ----- Method: MCWorkingCopy>>stubAncestry (in category 'operations') ----- stubAncestry "Stub all but the most recent 10 of my ancestry tree to save memory with a proxy which can be transparently accessed later, if necessary." + self ancestors ifEmpty: [ ^ self ]. repositoryGroup ifNotNil: [ | tenAgo count | count := 0. ancestry ancestorsDoWhileTrue: [ : each | tenAgo := each. (count := count + 1) < 10 ]. + tenAgo + stubAncestryFor: self ancestors anyOne + using: repositoryGroup ]! - tenAgo stubAncestryUsing: repositoryGroup ]!
packages@lists.squeakfoundation.org