Marcel Taeumel uploaded a new version of MonticelloConfigurations to project The Trunk: http://source.squeak.org/trunk/MonticelloConfigurations-mt.179.mcz
==================== Summary ====================
Name: MonticelloConfigurations-mt.179 Author: mt Time: 2 July 2022, 11:26:29.792753 am UUID: 7e551122-54fa-2842-bde7-286931b40d4f Ancestors: MonticelloConfigurations-dtl.178
Fixes HTTP-vs-HTTPS confusion during MC updates so that we can migrate from HTTP to HTTPS without having to download every .mcm there has ever been again.
=============== Diff against MonticelloConfigurations-dtl.178 ===============
Item was added: + ----- Method: MCMcmUpdater class>>alternativeDescriptionOf: (in category 'utilities') ----- + alternativeDescriptionOf: repoDescription + "Treat HTTP and HTTPS as the same repository." + + (repoDescription beginsWith: 'http:') + ifTrue: [^ 'https', (repoDescription allButFirst: 4)]. + (repoDescription beginsWith: 'https:') + ifTrue: [^ 'http', (repoDescription allButFirst: 5)]. + ^ repoDescription!
Item was changed: ----- Method: MCMcmUpdater class>>forRepository:updateMap: (in category 'registry') ----- forRepository: repository updateMap: basename "Answer the requested updater from the repository, or nil of not found"
"MCMcmUpdater forRepository: 'http://source.squeak.org/trunk' updateMap: 'update'" "MCMcmUpdater forRepository: 'foo' updateMap: 'bar'"
^ ((Registry ifNil: [Registry := Dictionary new]) at: repository + ifAbsent: [Registry at: (self alternativeDescriptionOf: repository) ifAbsent: [^nil]]) - ifAbsent: [^nil]) at: basename ifAbsent: [^nil]!
Item was added: + ----- Method: MCMcmUpdater>>lastUpdateMapAt: (in category 'accessing') ----- + lastUpdateMapAt: repoDescription + + ^ self lastUpdateMap + at: repoDescription + ifAbsent: [ + self lastUpdateMap + at: (self class alternativeDescriptionOf: repoDescription) + ifAbsent: [0]]!
Item was added: + ----- Method: MCMcmUpdater>>lastUpdateMapAt:put: (in category 'accessing') ----- + lastUpdateMapAt: repoDescription put: lastUpdate + + self lastUpdateMap at: repoDescription put: lastUpdate. + self lastUpdateMap at: (self class alternativeDescriptionOf: repoDescription) put: lastUpdate.!
Item was changed: ----- Method: MCMcmUpdater>>refreshUpdateMapFor:with: (in category 'updating') ----- refreshUpdateMapFor: r with: updateList "Update the lastUpdateMap and answer a possibly reduced updateList"
| config | + (self lastUpdateMapAt: r description) = 0 ifTrue: [ - (lastUpdateMap at: r description ifAbsent: [0]) = 0 ifTrue: [ "No update has ever been loaded from this repo. If no package is present in the image either, we can skip right to the latest config" config := r versionNamed: updateList last value. (config dependencies anySatisfy: [:dep | dep package hasWorkingCopy]) ifFalse: [(self useLatestPackagesFrom: r) + ifTrue: [self lastUpdateMapAt: r description put: updateList last key]. - ifTrue: [lastUpdateMap at: r description put: updateList last key]. updateList isEmpty ifTrue: [^ #()] ifFalse: [^ updateList last: 1]]]. ^ updateList !
Item was changed: ----- Method: MCMcmUpdater>>updateFromRepository (in category 'updating') ----- updateFromRepository
| config repo | repo := self getRepositoryFromRepositoryGroup. repo cacheAllFileNamesDuring: [ | updateList | updateList := self updateListFor: repo. "Proceed only if there are updates available at all." updateList ifNotEmpty: [ updateList := self refreshUpdateMapFor: repo with: updateList. "Now process each update file. Check if we have all dependencies and if not, load the entire configuration (this is mostly to skip older updates quickly)" updateList do:[:assoc| ProgressNotification signal: '' extra: ('Processing {1}' translated format: {assoc value}). config := repo versionNamed: assoc value. self updateFromConfig: config. + self lastUpdateMapAt: repo description put: assoc key. - self lastUpdateMap at: repo description put: assoc key. ] displayingProgress: 'Processing configurations' translated. "We've loaded all the provided update configurations. Use the latest configuration to update all the remaining packages." (self useLatestPackagesFrom: repo) ifTrue: [ config updateFromRepositories. config upgrade]. ]]. ^ config !
Item was changed: ----- Method: MCMcmUpdater>>updateFromRepository:upTo: (in category 'updating') ----- updateFromRepository: repository upTo: versionNumber
| config | config := nil. repository cacheAllFileNamesDuring: [ | updateList | updateList := self updateListFor: repository. "Proceed only if there are updates available at all." updateList ifNotEmpty: [ updateList := self refreshUpdateMapFor: repository with: updateList. "Now process each update file. Check if we have all dependencies and if not, load the entire configuration (this is mostly to skip older updates quickly)" updateList do:[:assoc| assoc key > versionNumber ifTrue: [^config]. ProgressNotification signal: '' extra: ('Processing ' translated format: {assoc value}). config := repository versionNamed: assoc value. self updateFromConfig: config. + self lastUpdateMapAt: repository description put: assoc key. - self lastUpdateMap at: repository description put: assoc key. ] displayingProgress: 'Processing configurations' translated. ]]. ^config !
Item was changed: ----- Method: MCMcmUpdater>>updateListFor: (in category 'private') ----- updateListFor: repo
| updateList allNames minVersion | updateList := OrderedCollection new. + minVersion := self lastUpdateMapAt: repo description. - minVersion := self lastUpdateMap at: repo description ifAbsent: [0]. "Find all the update-*.mcm files" allNames := ('Checking {1}' translated format: {repo description}) displayProgressFrom: 0 to: 1 during: [:bar| bar value: 0. repo allFileNamesOrCache ]. allNames do: [:fileName | | version | ((fileName endsWith: '.mcm') and: [fileName packageAndBranchName = self updateMapName and: [(version := fileName versionNumber) >= minVersion]]) ifTrue: [updateList add: version -> fileName]]. ^updateList sort!
squeak-dev@lists.squeakfoundation.org