[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