[Pkg] Installer: Installer-Formats-kph.2.mcz
squeak-dev-noreply at lists.squeakfoundation.org
squeak-dev-noreply at lists.squeakfoundation.org
Tue Feb 24 22:47:11 UTC 2009
A new version of Installer-Formats was added to project Installer:
http://www.squeaksource.com/Installer/Installer-Formats-kph.2.mcz
==================== Summary ====================
Name: Installer-Formats-kph.2
Author: kph
Time: 24 February 2009, 10:47:08 pm
UUID: c7f6e54b-721d-477a-97ae-2692e0d1efa1
Ancestors: Installer-Formats-kph.1
_ assignments to :=
=============== Diff against Installer-Formats-kph.1 ===============
Item was changed:
----- Method: SARInstaller>>memberNamed: (in category 'client services') -----
memberNamed: aString
^(zip member: aString)
ifNil: [ | matching |
+ matching := zip membersMatching: aString.
- matching _ zip membersMatching: aString.
matching isEmpty ifFalse: [ matching last ]].!
Item was changed:
----- Method: SARInstaller>>openGraphicsFile: (in category 'client services') -----
openGraphicsFile: memberOrName
| member morph |
+ member := self memberNamed: memberOrName.
- member _ self memberNamed: memberOrName.
member ifNil: [ ^self errorNoSuchMember: memberOrName ].
+ morph := (World drawingClass fromStream: member contentStream binary).
- morph _ (World drawingClass fromStream: member contentStream binary).
morph ifNotNil: [ morph openInWorld ].
self installed: member.!
Item was changed:
----- Method: SARInstaller>>installMember: (in category 'client services') -----
installMember: memberOrName
| memberName extension isGraphic stream member |
+ member := self memberNamed: memberOrName.
- member _ self memberNamed: memberOrName.
member ifNil: [ ^false ].
+ memberName := member fileName.
+ extension := (FileDirectory extensionFor: memberName) asLowercase.
- memberName _ member fileName.
- extension _ (FileDirectory extensionFor: memberName) asLowercase.
Smalltalk at: #CRDictionary ifPresent: [ :crDictionary |
(extension = crDictionary fileNameSuffix) ifTrue: [ self fileInGenieDictionaryNamed: memberName. ^true ] ].
extension caseOf: {
[ Project projectExtension ] -> [ self fileInProjectNamed: memberName createView: true ].
[ FileStream st ] -> [ self fileInPackageNamed: memberName ].
[ FileStream cs ] -> [ self fileInMemberNamed: memberName ].
" [ FileStream multiSt ] -> [ self fileInMemberNamedAsUTF8: memberName ].
[ FileStream multiCs ] -> [ self fileInMemberNamedAsUTF8: memberName ].
"
[ 'mc' ] -> [ self fileInMonticelloPackageNamed: memberName ].
[ 'mcv' ] -> [ self fileInMonticelloVersionNamed: memberName ].
[ 'mcz' ] -> [ self fileInMonticelloZipVersionNamed: memberName ].
[ 'morph' ] -> [ self fileInMorphsNamed: member addToWorld: true ].
[ 'ttf' ] -> [ self fileInTrueTypeFontNamed: memberName ].
[ 'translation' ] -> [ self fileInMemberNamed: memberName ].
} otherwise: [
('t*xt' match: extension) ifTrue: [ self openTextFile: memberName ]
+ ifFalse: [ stream := member contentStream.
+ isGraphic := ImageReadWriter understandsImageFormat: stream.
- ifFalse: [ stream _ member contentStream.
- isGraphic _ ImageReadWriter understandsImageFormat: stream.
stream reset.
isGraphic
ifTrue: [ self openGraphicsFile: member ]
ifFalse: [ "now what?" ^false ]]
].
^true
!
Item was changed:
----- Method: SARInstaller>>fileInMemberNamed: (in category 'client services') -----
fileInMemberNamed: csName
"This is to be used from preamble/postscript code to file in zip members as ChangeSets."
| cs |
+ cs := self memberNamed: csName.
- cs _ self memberNamed: csName.
cs ifNil: [ ^self errorNoSuchMember: csName ].
self class fileIntoChangeSetNamed: csName fromStream: cs contentStream text setConverterForCode.
self installed: cs.
!
Item was changed:
----- Method: MczInstaller class>>clearVersionInfo (in category 'versionInfo') -----
clearVersionInfo
+ Versions := Dictionary new!
- Versions _ Dictionary new!
Item was changed:
----- Method: SARInstaller>>fileInTrueTypeFontNamed: (in category 'client services') -----
fileInTrueTypeFontNamed: memberOrName
| member description |
member := self memberNamed: memberOrName.
member ifNil: [^self errorNoSuchMember: memberOrName].
+ description := TTFontDescription addFromTTStream: member contentStream.
- description _ TTFontDescription addFromTTStream: member contentStream.
TTCFont newTextStyleFromTT: description.
World doOneCycle.
self installed: member!
Item was changed:
----- Method: MczInstaller>>install (in category 'installation') -----
install
| sources |
self unregisterPackage.
+ zip := ZipArchive new.
- zip _ ZipArchive new.
zip readFrom: stream.
self checkDependencies ifFalse: [^false].
self recordVersionInfo.
+ sources := (zip membersMatching: 'snapshot/*')
- sources _ (zip membersMatching: 'snapshot/*')
asSortedCollection: [:a :b | a fileName < b fileName].
sources do: [:src | self installMember: src].!
Item was changed:
----- Method: SARInstaller>>fileInPackageNamed: (in category 'client services') -----
fileInPackageNamed: memberName
"This is to be used from preamble/postscript code to file in zip
members as DVS packages."
| member current new baseName imagePackageLoader packageInfo streamPackageLoader packageManager |
+ member := self zip memberNamed: memberName.
- member _ self zip memberNamed: memberName.
member ifNil: [ ^self errorNoSuchMember: memberName ].
+ imagePackageLoader := Smalltalk at: #ImagePackageLoader ifAbsent: [].
+ streamPackageLoader := Smalltalk at: #StreamPackageLoader ifAbsent: [].
+ packageInfo := Smalltalk at: #PackageInfo ifAbsent: [].
+ packageManager := Smalltalk at: #FilePackageManager ifAbsent: [].
- imagePackageLoader _ Smalltalk at: #ImagePackageLoader ifAbsent: [].
- streamPackageLoader _ Smalltalk at: #StreamPackageLoader ifAbsent: [].
- packageInfo _ Smalltalk at: #PackageInfo ifAbsent: [].
- packageManager _ Smalltalk at: #FilePackageManager ifAbsent: [].
"If DVS isn't present, do a simple file-in"
(packageInfo isNil or: [imagePackageLoader isNil or: [streamPackageLoader isNil]])
ifTrue: [ ^ self fileInMemberNamed: memberName ].
+ baseName := memberName copyReplaceAll: '.st' with: '' asTokens: false.
- baseName _ memberName copyReplaceAll: '.st' with: '' asTokens: false.
(packageManager allManagers anySatisfy: [ :pm | pm packageName = baseName ])
ifTrue: [
+ current := imagePackageLoader new package: (packageInfo named: baseName).
+ new := streamPackageLoader new stream: member contentStream ascii.
- current _ imagePackageLoader new package: (packageInfo named: baseName).
- new _ streamPackageLoader new stream: member contentStream ascii.
(new changesFromBase: current) fileIn ]
ifFalse: [ self class fileIntoChangeSetNamed: baseName fromStream: member contentStream ascii setConverterForCode. ].
packageManager registerPackage: baseName.
self installed: member.!
Item was changed:
----- Method: MczInstaller>>parseMember: (in category 'utilities') -----
parseMember: fileName
| tokens |
+ tokens := (self scanner scanTokens: (zip contentsOf: fileName)) first.
- tokens _ (self scanner scanTokens: (zip contentsOf: fileName)) first.
^ self associate: tokens!
Item was changed:
----- Method: MczInstaller>>associate: (in category 'utilities') -----
associate: tokens
| result |
+ result := Dictionary new.
- result _ Dictionary new.
tokens pairsDo: [:key :value |
+ value isString ifFalse: [value := value collect: [:ea | self associate: ea]].
+ value = 'nil' ifTrue: [value := ''].
- value isString ifFalse: [value _ value collect: [:ea | self associate: ea]].
- value = 'nil' ifTrue: [value _ ''].
result at: key put: value].
^ result!
Item was changed:
----- Method: SARInstaller>>initialize (in category 'initialization') -----
initialize
+ installed := OrderedCollection new.!
- installed _ OrderedCollection new.!
Item was changed:
----- Method: SARInstaller>>openTextFile: (in category 'client services') -----
openTextFile: memberOrName
"Open a text window on the given member"
| member |
+ member := self memberNamed: memberOrName.
- member _ self memberNamed: memberOrName.
member ifNil: [ ^self errorNoSuchMember: memberOrName ].
StringHolder new
acceptContents: member contents;
openLabel: member fileName.
self installed: member.!
Item was changed:
----- Method: MczInstaller>>checkDependencies (in category 'utilities') -----
checkDependencies
| dependencies unmet |
+ dependencies := (zip membersMatching: 'dependencies/*')
- dependencies _ (zip membersMatching: 'dependencies/*')
collect: [:member | self extractInfoFrom: (self parseMember: member)].
+ unmet := dependencies reject: [:dep |
- unmet _ dependencies reject: [:dep |
self versions: Versions anySatisfy: (dep at: #id)].
^ unmet isEmpty or: [
self confirm: (String streamContents: [:s|
s nextPutAll: 'The following dependencies seem to be missing:'; cr.
unmet do: [:each | s nextPutAll: (each at: #name); cr].
s nextPutAll: 'Do you still want to install this package?'])]!
Item was changed:
----- Method: SARInstaller>>installAllMembers (in category 'fileIn') -----
installAllMembers
"Try to install all the members, in order, based on their filenames and/or contents."
| uninstalled |
+ uninstalled := OrderedCollection new.
- uninstalled _ OrderedCollection new.
zip members do: [ :member | self installMember: member ].
+ uninstalled := self uninstalledMembers.
- uninstalled _ self uninstalledMembers.
uninstalled isEmpty ifTrue: [ ^self ].
uninstalled inspect.!
Item was changed:
----- Method: SARInstaller>>extractMemberWithoutPath:inDirectory: (in category 'client services') -----
extractMemberWithoutPath: aMemberOrName inDirectory: aDirectory
"Extract aMemberOrName to its own filename, but ignore any directory paths, using aDirectory instead"
| member |
+ member := self memberNamed: aMemberOrName.
- member _ self memberNamed: aMemberOrName.
member ifNil: [ ^self errorNoSuchMember: aMemberOrName ].
self zip extractMemberWithoutPath: member inDirectory: aDirectory.
self installed: member.!
Item was changed:
----- Method: MczInstaller>>useNewChangeSetDuring: (in category 'utilities') -----
useNewChangeSetDuring: aBlock
| changeHolder oldChanges newChanges |
+ changeHolder := (ChangeSet respondsTo: #newChanges:)
- changeHolder _ (ChangeSet respondsTo: #newChanges:)
ifTrue: [ChangeSet]
ifFalse: [Smalltalk].
+ oldChanges := (ChangeSet respondsTo: #current)
- oldChanges _ (ChangeSet respondsTo: #current)
ifTrue: [ChangeSet current]
ifFalse: [Smalltalk changes].
+ newChanges := ChangeSet new name: (ChangeSet uniqueNameLike: self extractPackageName).
- newChanges _ ChangeSet new name: (ChangeSet uniqueNameLike: self extractPackageName).
changeHolder newChanges: newChanges.
[aBlock value] ensure: [changeHolder newChanges: oldChanges].!
Item was changed:
----- Method: SARInstaller>>installedMembers (in category 'accessing') -----
installedMembers
"Answer the zip members that have been installed already."
+ ^installed ifNil: [ installed := OrderedCollection new ]!
- ^installed ifNil: [ installed _ OrderedCollection new ]!
Item was changed:
----- Method: SARInstaller>>fileInProjectNamed:createView: (in category 'client services') -----
fileInProjectNamed: projectOrMemberName createView: aBoolean
"This is to be used from preamble/postscript code to file in SAR members
as Projects.
Answers the loaded project, or nil.
Does not enter the loaded project.
If aBoolean is true, also creates a ProjectViewMorph
(possibly in a window, depending on your Preferences)."
| member project triple memberName |
+ member := self memberNamed: projectOrMemberName.
- member _ self memberNamed: projectOrMemberName.
member
+ ifNotNil: [ memberName := member fileName ]
+ ifNil: [ member := self memberNamed: (memberName := self memberNameForProjectNamed: projectOrMemberName) ].
- ifNotNil: [ memberName _ member fileName ]
- ifNil: [ member _ self memberNamed: (memberName _ self memberNameForProjectNamed: projectOrMemberName) ].
member ifNil: [ ^self errorNoSuchMember: projectOrMemberName ].
+ triple := Project parseProjectFileName: memberName unescapePercents.
+ project := nil.
- triple _ Project parseProjectFileName: memberName unescapePercents.
- project _ nil.
[[ProjectLoading
openName: triple first
stream: member contentStream
fromDirectory: nil
withProjectView: nil]
on: ProjectViewOpenNotification
do: [:ex | ex resume: aBoolean]]
on: ProjectEntryNotification
do: [:ex |
+ project := ex projectToEnter.
- project _ ex projectToEnter.
ex resume].
self installed: member.
^ project!
Item was changed:
----- Method: SARInstaller>>fileInFrom: (in category 'fileIn') -----
fileInFrom: stream
"The zip has been saved already by the download.
Read the zip into my instvar, then file in the correct members"
| preamble postscript |
[
stream position: 0.
+ zip := ZipArchive new readFrom: stream.
- zip _ ZipArchive new readFrom: stream.
+ preamble := zip memberNamed: 'install/preamble'.
- preamble _ zip memberNamed: 'install/preamble'.
preamble ifNotNil: [
preamble contentStream text setConverterForCode fileInFor: self announcing: 'Preamble'.
self class currentChangeSet preambleString: preamble contents.
].
+ postscript := zip memberNamed: 'install/postscript'.
- postscript _ zip memberNamed: 'install/postscript'.
postscript ifNotNil: [
postscript contentStream text setConverterForCode fileInFor: self announcing: 'Postscript'.
self class currentChangeSet postscriptString: postscript contents.
].
preamble isNil & postscript isNil ifTrue: [
(self confirm: 'No install/preamble or install/postscript member were found.
Install all the members automatically?') ifTrue: [ self installAllMembers ]
].
] ensure: [ stream close ].
!
Item was changed:
----- Method: SARInstaller>>importImage: (in category 'client services') -----
importImage: memberOrName
| member form |
+ member := self memberNamed: memberOrName.
- member _ self memberNamed: memberOrName.
member ifNil: [ ^self errorNoSuchMember: memberOrName ].
+ form := ImageReadWriter formFromStream: member contentStream binary.
- form _ ImageReadWriter formFromStream: member contentStream binary.
form ifNil: [ ^self ].
Imports default importImage: form named: (FileDirectory localNameFor: member fileName) sansPeriodSuffix.
self installed: member.!
Item was changed:
----- Method: MczInstaller>>installMember: (in category 'installation') -----
installMember: member
| str |
self useNewChangeSetDuring:
+ [str := member contentStream text.
- [str _ member contentStream text.
str setConverterForCode.
str fileInAnnouncing: 'booting ', (fileName ifNil: [ member fileName ])]!
Item was changed:
----- Method: SARInstaller>>fileInMorphsNamed:addToWorld: (in category 'client services') -----
fileInMorphsNamed: memberName addToWorld: aBoolean
"This will load the Morph (or Morphs) from the given member.
Answers a Morph, or a list of Morphs, or nil if no such member or error.
If aBoolean is true, also adds them and their models to the World."
| member morphOrList |
+ member := self memberNamed: memberName.
- member _ self memberNamed: memberName.
member ifNil: [ ^self errorNoSuchMember: memberName ].
self installed: member.
+ morphOrList := member contentStream fileInObjectAndCode.
- morphOrList _ member contentStream fileInObjectAndCode.
morphOrList ifNil: [ ^nil ].
aBoolean ifTrue: [ ActiveWorld addMorphsAndModel: morphOrList ].
^morphOrList
!
Item was changed:
----- Method: SARInstaller>>fileInGenieDictionaryNamed: (in category 'client services') -----
fileInGenieDictionaryNamed: memberName
"This is to be used from preamble/postscript code to file in zip
members as Genie gesture dictionaries.
Answers a dictionary."
| member object crDictionary stream |
+ crDictionary := Smalltalk at: #CRDictionary ifAbsent: [ ^self error: 'Genie not installed' ].
- crDictionary _ Smalltalk at: #CRDictionary ifAbsent: [ ^self error: 'Genie not installed' ].
"don't know how to recursively load"
+ member := self memberNamed: memberName.
- member _ self memberNamed: memberName.
member ifNil: [ ^self errorNoSuchMember: memberName ].
+ stream := ReferenceStream on: member contentStream.
- stream _ ReferenceStream on: member contentStream.
+ [ object := stream next ]
- [ object _ stream next ]
on: Error do:
[:ex | stream close.
self inform: 'Error on loading: ' , ex description. ^ nil ].
stream close.
(object notNil and: [object name isEmptyOrNil])
+ ifTrue: [object := crDictionary name: object storedName].
- ifTrue: [object _ crDictionary name: object storedName].
self installed: member.
^ object
!
Item was changed:
----- Method: SARInstaller>>memberNameForProjectNamed: (in category 'client services') -----
memberNameForProjectNamed: projectName
"Answer my member name for the given project, or nil.
Ignores version numbers and suffixes, and also unescapes percents in filenames."
^self zip memberNames detect: [ :memberName | | triple |
+ triple := Project parseProjectFileName: memberName unescapePercents.
- triple _ Project parseProjectFileName: memberName unescapePercents.
triple first asLowercase = projectName asLowercase
] ifNone: [ nil ].!
Item was changed:
----- Method: MczInstaller>>stream: (in category 'accessing') -----
stream: aStream
+ stream := aStream!
- stream _ aStream!
More information about the Packages
mailing list