A new version of Sake-Installer was added to project Sake : http://www.squeaksource.com/Sake/Sake-Installer-mtf.14.mcz
==================== Summary ====================
Name: Sake-Installer-mtf.14 Author: mtf Time: 9 October 2008, 10:42:15 am UUID: 0fa61680-e251-4693-b7a3-55ae50ed7d93 Ancestors: Sake-Installer-mtf.13
Split out files, sake, and the update stream. This concludes the Installer split-up
=============== Diff against Sake-Installer-mtf.13 ===============
Item was added: + ----- Method: SakeUpdateStreamInstaller>>writeList:toStream: (in category 'updates') ----- + writeList: listContents toStream: strm + "Write a parsed updates.list out as text. + This is the inverse of parseUpdateListContents:" + + | fileNames releaseTag | + strm reset. + listContents do: + [:pair | + releaseTag := pair first. + fileNames := pair last. + strm nextPut: $#; nextPutAll: releaseTag; cr. + fileNames do: [:fileName | strm nextPutAll: fileName; cr]]. + strm close!
Item was added: + SakeInstaller subclass: #SakeFileInstaller + instanceVariableNames: 'afile' + classVariableNames: '' + poolDictionaries: '' + category: 'Sake-Installer'!
Item was added: + SakeInstaller subclass: #SakeUpdateStreamInstaller + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'Sake-Installer'!
Item was added: + ----- Method: SakeUpdateStreamInstaller>>loadUpdatesFromDisk (in category 'updates') ----- + loadUpdatesFromDisk + + | updateDirectory updateNumbers | + updateDirectory := self updateDirectoryOrNil. + updateDirectory ifNil: [^ self]. + updateNumbers := updateDirectory fileNames + collect: [:fn | fn initialIntegerOrNil] + thenSelect: [:fn | fn notNil]. + + self loadUpdatesFromDiskToUpdateNumber: updateNumbers max + stopIfGap: false + + !
Item was changed: SakeInstaller subclass: #SakeXInstaller + instanceVariableNames: '' + classVariableNames: '' - instanceVariableNames: 'afile sake' - classVariableNames: 'Sake' poolDictionaries: '' category: 'Sake-Installer'!
!SakeXInstaller commentStamp: 'mtf 10/1/2008 22:24' prior: 0! I am a copy of Installer as of Installer-Core-kph.232. I am being split up. I am called SakeXInstaller because I stand-in for Sake{MC,SM,Mantis,Web,etc}Installer!
Item was added: + ----- Method: SakeSakeInstaller class>>sake (in category 'accessing') ----- + sake + + ^ Sake ifNil: [ self classPackages current ]!
Item was added: + ----- Method: SakeFileInstaller class>>installFile: (in category 'instanciation') ----- + installFile: fileName + + ^ (self file: fileName) install. + !
Item was added: + ----- Method: SakeFileInstaller>>basicView (in category 'basic interface') ----- + basicView + + self view: self file from: (FileDirectory readOnlyFileNamed: self file). + + !
Item was added: + ----- Method: SakeFileInstaller>>basicInstall (in category 'basic interface') ----- + basicInstall + + self install: self file from: (FileDirectory default readOnlyFileNamed: self file) + + !
Item was added: + ----- Method: SakeInstaller class>>sake: (in category 'sake-sake') ----- + sake: aSakePackagesClass + + ^ SakeSakeInstaller new sake: aSakePackagesClass!
Item was added: + ----- Method: SakeFileInstaller class>>file: (in category 'instanciation') ----- + file: fileName + + ^ SakeFileInstaller new file: fileName; yourself + !
Item was changed: ----- Method: SakeInstaller>>install (in category 'public interface') ----- install
"self logErrorDuring: [ self sake ifNotNil: [ ^ self sakeInstall ]. - self file ifNotNil: [ ^ self fileInstall ]. ]"
self logErrorDuring: [self basicInstall]!
Item was added: + ----- Method: SakeFileInstaller>>basicBrowse (in category 'basic interface') ----- + basicBrowse + + self browse: self file from: (FileDirectory readOnlyFileNamed: self file). + + !
Item was added: + ----- Method: SakeInstaller class>>setSakeToUse: (in category 'sake-sake') ----- + setSakeToUse: aClass + + SakeSakeInstaller sake: aClass!
Item was added: + ----- Method: SakeInstaller class>>sake (in category 'sake-sake') ----- + sake + + ^ self sake: SakeSakeInstaller sake!
Item was added: + ----- Method: SakeSakeInstaller>>sake: (in category 'websqueakmap') ----- + sake: aSakePackagesClass + + sake := aSakePackagesClass!
Item was added: + ----- Method: SakeFileInstaller>>file (in category 'accessing') ----- + file + + ^ afile!
Item was changed: ----- Method: SakeInstaller>>view (in category 'public interface') ----- view - - "self logErrorDuring: [ - self file ifNotNil: [ ^ self fileView ]. - ]" - self logErrorDuring: [self basicView]!
Item was added: + ----- Method: SakeUpdateStreamInstaller>>updateDirectoryOrNil (in category 'updates') ----- + updateDirectoryOrNil + + ^ (FileDirectory default directoryNames includes: 'updates') + ifTrue: [FileDirectory default directoryNamed: 'updates'] + ifFalse: [self inform: 'Error: cannot find "updates" folder'. + nil]!
Item was added: + ----- Method: SakeSakeInstaller>>sake (in category 'websqueakmap') ----- + sake + + ^ sake !
Item was added: + SakeInstaller subclass: #SakeSakeInstaller + instanceVariableNames: 'sake' + classVariableNames: 'Sake' + poolDictionaries: '' + category: 'Sake-Installer'!
Item was added: + ----- Method: SakeUpdateStreamInstaller>>parseUpdateListContents: (in category 'updates') ----- + parseUpdateListContents: listContentString + "Parse the contents of an updates.list into {{releaseTag. {fileNames*}}*}, and return it." + + | sections releaseTag strm line fileNames | + sections := OrderedCollection new. + fileNames := OrderedCollection new: 1000. + releaseTag := nil. + strm := ReadStream on: listContentString. + [strm atEnd] whileFalse: + [line := strm upTo: Character cr. + line size > 0 ifTrue: + [line first = $# + ifTrue: [releaseTag ifNotNil: [sections addLast: {releaseTag. fileNames asArray}]. + releaseTag := line allButFirst. + fileNames resetTo: 1] + ifFalse: [line first = $* ifFalse: [fileNames addLast: line]]]]. + releaseTag ifNotNil: [sections addLast: {releaseTag. fileNames asArray}]. + ^ sections asArray + !
Item was added: + ----- Method: SakeFileInstaller>>file: (in category 'accessing') ----- + file: f + + afile := f!
Item was changed: ----- Method: SakeInstaller>>browse (in category 'public interface') ----- browse - - "self logErrorDuring: [ - self file ifNotNil: [ ^ self fileBrowse ]. - ]" - self logErrorDuring: [self basicBrowse]!
Item was added: + ----- Method: SakeUpdateStreamInstaller>>changesetNamesFromUpdates:through: (in category 'updates') ----- + changesetNamesFromUpdates: startNumber through: stopNumber + "Answer the concatenation of summary strings for updates numbered in the given range" + "self new changesetNamesFromUpdates: 7059 through: 7061" + + ^ String streamContents: [:aStream | + ((ChangeSet changeSetsNamedSuchThat: + [:aName | aName first isDigit and: + [aName initialIntegerOrNil >= startNumber] and: + [aName initialIntegerOrNil <= stopNumber]]) asSortedCollection: + [:a :b | a name < b name]) do: + [:aChangeSet | aStream cr; nextPutAll: aChangeSet summaryString]] + + + + !
Item was added: + ----- Method: SakeSakeInstaller>>sakeInstall (in category 'actions') ----- + sakeInstall + + self withAnswersDo: [ (self packages collect: [ :packageName | sake named: packageName ]) asTask run ]. + !
Item was added: + ----- Method: SakeUpdateStreamInstaller>>loadUpdatesFromDiskToUpdateNumber:stopIfGap: (in category 'updates') ----- + loadUpdatesFromDiskToUpdateNumber: lastUpdateNumber stopIfGap: stopIfGapFlag + "To use this mechanism, be sure all updates you want to have considered + are in a folder named 'updates' which resides in the same directory as + your image. Having done that, simply evaluate: + + Installer new loadUpdatesFromDiskToUpdateNumber: 100020 stopIfGap: false + + and all numbered updates <= lastUpdateNumber not yet in the image will + be loaded in numerical order." + + "apparently does not use the updatelist too bad!! and to rewrite - sd 7 March 2008" + | previousHighest currentUpdateNumber done fileNames aMessage updateDirectory loaded | + updateDirectory := self updateDirectoryOrNil. + updateDirectory ifNil: [^ self]. + previousHighest := SystemVersion current highestUpdate. + currentUpdateNumber := previousHighest. + done := false. + loaded := 0. + [done] + whileFalse: [currentUpdateNumber := currentUpdateNumber + 1. + currentUpdateNumber > lastUpdateNumber + ifTrue: [done := true] + ifFalse: [fileNames := updateDirectory fileNamesMatching: currentUpdateNumber printString , '*'. + fileNames size > 1 + ifTrue: [^ self inform: 'ambiguity -- two files both start with ' , currentUpdateNumber printString , ' + (at this point it is probably best to remedy + the situation on disk, then try again.)']. + fileNames size == 0 + ifTrue: [Transcript cr; show: 'gap in updates from disk for update number '; print: currentUpdateNumber; show: ' found...'. + done := stopIfGapFlag] + ifFalse: [ChangeSet + newChangesFromStream: (updateDirectory readOnlyFileNamed: fileNames first) + named: fileNames first. + SystemVersion current registerUpdate: currentUpdateNumber. + loaded := loaded + 1]]]. + aMessage := loaded = 0 + ifTrue: ['No new updates found.'] + ifFalse: [loaded printString , ' update(s) loaded.']. + self inform: aMessage , ' + Highest numbered update is now ' , (currentUpdateNumber - 1) printString , '.'!
Item was added: + ----- Method: SakeSakeInstaller class>>classPackages (in category 'accessing system') ----- + classPackages + + ^Smalltalk at: #Packages ifAbsent: [ self error: 'Sake Packages code not present' ]!
Item was added: + ----- Method: SakeSakeInstaller class>>sake: (in category 'accessing') ----- + sake: aClass + + Sake := aClass!
Item was removed: - ----- Method: SakeXInstaller>>updateDirectoryOrNil (in category 'updates') ----- - updateDirectoryOrNil - - ^ (FileDirectory default directoryNames includes: 'updates') - ifTrue: [FileDirectory default directoryNamed: 'updates'] - ifFalse: [self inform: 'Error: cannot find "updates" folder'. - nil]!
Item was removed: - ----- Method: SakeXInstaller>>file: (in category 'accessing') ----- - file: f - - afile := f!
Item was removed: - ----- Method: SakeXInstaller>>fileInstall (in category 'file') ----- - fileInstall - - self install: self file from: (FileDirectory default readOnlyFileNamed: self file) - - !
Item was removed: - ----- Method: SakeXInstaller>>sakeInstall (in category 'actions') ----- - sakeInstall - - self withAnswersDo: [ (self packages collect: [ :packageName | sake named: packageName ]) asTask run ]. - !
Item was removed: - ----- Method: SakeXInstaller>>parseUpdateListContents: (in category 'updates') ----- - parseUpdateListContents: listContentString - "Parse the contents of an updates.list into {{releaseTag. {fileNames*}}*}, and return it." - - | sections releaseTag strm line fileNames | - sections := OrderedCollection new. - fileNames := OrderedCollection new: 1000. - releaseTag := nil. - strm := ReadStream on: listContentString. - [strm atEnd] whileFalse: - [line := strm upTo: Character cr. - line size > 0 ifTrue: - [line first = $# - ifTrue: [releaseTag ifNotNil: [sections addLast: {releaseTag. fileNames asArray}]. - releaseTag := line allButFirst. - fileNames resetTo: 1] - ifFalse: [line first = $* ifFalse: [fileNames addLast: line]]]]. - releaseTag ifNotNil: [sections addLast: {releaseTag. fileNames asArray}]. - ^ sections asArray - !
Item was removed: - ----- Method: SakeXInstaller class>>classPackages (in category 'accessing system') ----- - classPackages - - ^Smalltalk at: #Packages ifAbsent: [ self error: 'Sake Packages code not present' ]!
Item was removed: - ----- Method: SakeXInstaller class>>sake: (in category 'instanciation') ----- - sake: aSakePackagesClass - - ^ self new sake: aSakePackagesClass!
Item was removed: - ----- Method: SakeXInstaller>>changesetNamesFromUpdates:through: (in category 'updates') ----- - changesetNamesFromUpdates: startNumber through: stopNumber - "Answer the concatenation of summary strings for updates numbered in the given range" - "self new changesetNamesFromUpdates: 7059 through: 7061" - - ^ String streamContents: [:aStream | - ((ChangeSet changeSetsNamedSuchThat: - [:aName | aName first isDigit and: - [aName initialIntegerOrNil >= startNumber] and: - [aName initialIntegerOrNil <= stopNumber]]) asSortedCollection: - [:a :b | a name < b name]) do: - [:aChangeSet | aStream cr; nextPutAll: aChangeSet summaryString]] - - - - !
Item was removed: - ----- Method: SakeXInstaller>>loadUpdatesFromDiskToUpdateNumber:stopIfGap: (in category 'updates') ----- - loadUpdatesFromDiskToUpdateNumber: lastUpdateNumber stopIfGap: stopIfGapFlag - "To use this mechanism, be sure all updates you want to have considered - are in a folder named 'updates' which resides in the same directory as - your image. Having done that, simply evaluate: - - Installer new loadUpdatesFromDiskToUpdateNumber: 100020 stopIfGap: false - - and all numbered updates <= lastUpdateNumber not yet in the image will - be loaded in numerical order." - - "apparently does not use the updatelist too bad!! and to rewrite - sd 7 March 2008" - | previousHighest currentUpdateNumber done fileNames aMessage updateDirectory loaded | - updateDirectory := self updateDirectoryOrNil. - updateDirectory ifNil: [^ self]. - previousHighest := SystemVersion current highestUpdate. - currentUpdateNumber := previousHighest. - done := false. - loaded := 0. - [done] - whileFalse: [currentUpdateNumber := currentUpdateNumber + 1. - currentUpdateNumber > lastUpdateNumber - ifTrue: [done := true] - ifFalse: [fileNames := updateDirectory fileNamesMatching: currentUpdateNumber printString , '*'. - fileNames size > 1 - ifTrue: [^ self inform: 'ambiguity -- two files both start with ' , currentUpdateNumber printString , ' - (at this point it is probably best to remedy - the situation on disk, then try again.)']. - fileNames size == 0 - ifTrue: [Transcript cr; show: 'gap in updates from disk for update number '; print: currentUpdateNumber; show: ' found...'. - done := stopIfGapFlag] - ifFalse: [ChangeSet - newChangesFromStream: (updateDirectory readOnlyFileNamed: fileNames first) - named: fileNames first. - SystemVersion current registerUpdate: currentUpdateNumber. - loaded := loaded + 1]]]. - aMessage := loaded = 0 - ifTrue: ['No new updates found.'] - ifFalse: [loaded printString , ' update(s) loaded.']. - self inform: aMessage , ' - Highest numbered update is now ' , (currentUpdateNumber - 1) printString , '.'!
Item was removed: - ----- Method: SakeXInstaller class>>setSakeToUse: (in category 'instanciation') ----- - setSakeToUse: aClass - - Sake := aClass!
Item was removed: - ----- Method: SakeXInstaller class>>sake (in category 'instanciation') ----- - sake - - ^ self sake: (Sake ifNil: [ self classPackages current ])!
Item was removed: - ----- Method: SakeXInstaller>>sake (in category 'websqueakmap') ----- - sake - - ^ sake !
Item was removed: - ----- Method: SakeXInstaller>>writeList:toStream: (in category 'updates') ----- - writeList: listContents toStream: strm - "Write a parsed updates.list out as text. - This is the inverse of parseUpdateListContents:" - - | fileNames releaseTag | - strm reset. - listContents do: - [:pair | - releaseTag := pair first. - fileNames := pair last. - strm nextPut: $#; nextPutAll: releaseTag; cr. - fileNames do: [:fileName | strm nextPutAll: fileName; cr]]. - strm close!
Item was removed: - ----- Method: SakeXInstaller>>loadUpdatesFromDisk (in category 'updates') ----- - loadUpdatesFromDisk - - | updateDirectory updateNumbers | - updateDirectory := self updateDirectoryOrNil. - updateDirectory ifNil: [^ self]. - updateNumbers := updateDirectory fileNames - collect: [:fn | fn initialIntegerOrNil] - thenSelect: [:fn | fn notNil]. - - self loadUpdatesFromDiskToUpdateNumber: updateNumbers max - stopIfGap: false - - !
Item was removed: - ----- Method: SakeXInstaller>>fileView (in category 'file') ----- - fileView - - self view: self file from: (FileDirectory readOnlyFileNamed: self file). - - !
Item was removed: - ----- Method: SakeXInstaller>>sake: (in category 'websqueakmap') ----- - sake: aSakePackagesClass - - sake := aSakePackagesClass!
Item was removed: - ----- Method: SakeXInstaller>>file (in category 'accessing') ----- - file - - ^ afile!
Item was removed: - ----- Method: SakeXInstaller class>>installFile: (in category 'instanciation') ----- - installFile: fileName - - ^ (self file: fileName) install. - !
Item was removed: - ----- Method: SakeXInstaller>>fileBrowse (in category 'file') ----- - fileBrowse - - self browse: self file from: (FileDirectory readOnlyFileNamed: self file). - - !
Item was removed: - ----- Method: SakeXInstaller class>>file: (in category 'instanciation') ----- - file: fileName - - ^ self new file: fileName; yourself - !
packages@lists.squeakfoundation.org