[squeak-dev] The Trunk: SMBase-gk.104.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Apr 11 19:28:59 UTC 2010

Göran Krampe uploaded a new version of SMBase to project The Trunk:

==================== Summary ====================

Name: SMBase-gk.104
Author: gk
Time: 11 April 2010, 9:28:15.38 pm
UUID: 98f3d474-b746-4636-9bc2-b5ae77e26946
Ancestors: SMBase-ul.103

Trying to quickly update trunk and SqueakMap server for release 4.1:

- Fixes for downloads/installation
- Move to SmartRefStream

=============== Diff against SMBase-ul.103 ===============

Item was changed:
  ----- Method: SMSqueakMap>>createCheckpointNumber: (in category 'checkpoints') -----
  createCheckpointNumber: number
+ 	"Export me using an ImageSegment or SmartRefStream.
- 	"Export me using an ImageSegment.
  	This is used for checkpointing the map on disk
  	in a form that can be brought into an independent image.
+ 	We do not overwrite older versions."
- 	We do not overwrite older versions, since using ImageSegments
- 	is an intermediate hack anyway we don't care about the disk waste!!
- 	Sidenote: Some refactoring was needed to produce a .gz file directly so
- 	I didn't bother."
+ 	| fname stream oldMutex |
+ 	fname := self filename, '.', number asString, '.r'.
+ 	(self directory fileExists: fname, 'gz') ifTrue: [self error: 'Checkpoint already exists!!'].
- 	| is fname stream oldMutex |
- 	fname := self filename, '.', number asString, '.s'.
- 	(self directory fileExists: fname) ifTrue: [self error: 'Checkpoint already exists!!'].
  	stream := StandardFileStream newFileNamed: (self directory fullNameFor: fname).
  	checkpointNumber := number.
  	oldMutex := mutex.
  	mutex := nil. self clearCaches.
+ 	[| smartStream |
+ 	[smartStream := SmartRefStream on: stream.
+ 	smartStream nextPut: self] ensure: [smartStream close].
- 	[is := ImageSegment new.
- 	is copyFromRoots: (Array with: self) sizeHint: 1000000 areUnique: true.
- 	is writeForExportOn: stream.
  	self compressFile: (StandardFileStream oldFileNamed: (self directory fullNameFor: fname)).
  	isDirty := false]
+ 		ensure: [mutex := oldMutex]!
- 		ensure: [mutex := oldMutex].
- 	^is!

Item was changed:
  ----- Method: SMSqueakMap classSide>>version (in category 'constants') -----
  	"This is the protocol version number used for clients to decide if
  	they need to update SMSqueakMap before synching with
  	the master. In short - only increase this if changes have made
  	the clients incompatible so that they need to be updated.
  	2.0: Removed Module stuff and added Package releases.
  	2.1: Various changes/additions and class shape changes.
+ 	2.2: Various 3.9 related fixes and bug fix in segment compression etc.
+ 	2.3: Moving to SmartRefStream when preparing to release Squeak 4.1."
- 	2.2: Various 3.9 related fixes and bug fix in segment compression etc."
+ 	^'2.3'!
- 	^'2.2'!

Item was changed:
  ----- Method: SMFileCache>>download: (in category 'services') -----
  download: aDownloadable 
  	"Download the file for this SMObject into the local file cache.
  	If the file already exists, delete it.
  	No unpacking or installation into the running image."
+ 	| stream file fileName dir |
+ 	[fileName := aDownloadable downloadFileName.
- 	[ | dir fileName |
- 	fileName := aDownloadable downloadFileName.
  		ifNil: [self inform: 'No download url, can not download.'.
  			^ false].
  	fileName isEmpty
  		ifTrue: [self inform: 'Download url lacks filename, can not download.'.
  			^ false].
  	dir := aDownloadable cacheDirectory.
+ 	[stream := self getStream: aDownloadable.
- 	[ | stream |
- 	stream := self getStream: aDownloadable.
  	stream ifNil: [^ false].
  	(dir fileExists: fileName)
  		ifTrue: [dir deleteFileNamed: fileName].
+ 	file := dir newFileNamed: fileName.
+ 	file binary; nextPutAll: stream contents]
+ 		ensure: [file ifNotNil: [file close]]]
- 	dir newFileNamed: fileName do: [:file | file binary; nextPutAll: stream contents]]]
  		on: Error
  		do: [^ false].
  	^ true!

Item was changed:
  ----- Method: SMFileCache>>getStream: (in category 'private') -----
  getStream: aDownloadable 
  	"Get the stream, either from the original url
  	or if that fails, from the server cache - unless
  	this is the actual server of course. :)
  	We also verify that the sha1sum is correct."
  	| stream |
  	[stream := aDownloadable downloadUrl asUrl retrieveContents contentStream binary.
  	(aDownloadable correctSha1sum: stream contents)
  		ifFalse: [self error: 'Incorrect SHA checksum of file from original URL']]
+ 		on: Error do: [:ex |
- 		on: Exception do: [:ex |
  			Transcript show: 'Download from original url (', aDownloadable downloadUrl, ') failed with this exception: ', ex messageText;cr.
  			SMUtilities isServer
  				ifTrue: [^nil]
  				ifFalse: [
  					Transcript show: 'Trying server cache instead.'; cr.
  					[stream := (self cacheUrlFor: aDownloadable) asUrl retrieveContents contentStream binary.
  					(stream contents size = 21 and: [stream contents asString = 'SMFILEMISSINGONSERVER'])
  						ifTrue: [self error: 'File missing in server cache'].
  					(stream contents size = 24 and: [stream contents asString = 'SMRELEASENOTDOWNLOADABLE'])
  						ifTrue: [self error: 'Release not downloadable'].
  					(aDownloadable correctSha1sum: stream contents)
  						ifFalse: [self error: 'Incorrect SHA checksum of file from server']]
+ 							on: Error do: [:ex2 | | msg |
- 							on: Exception do: [:ex2 | | msg |
  								msg := 'Download from server cache of ', aDownloadable printName, ' failed with this exception: ', ex2 messageText.
  								Transcript show: msg; cr.
  								self error: msg]]].
  	^ stream!

Item was changed:
  ----- Method: SMSqueakMap>>reload (in category 'public') -----
  	"Reload the map from the latest checkpoint on disk.
  	The opposite of #purge."
  	| fname stream map |
  	fname := self lastCheckpointFilename.
  	fname ifNil: [self error: 'No checkpoint available!!'].
  	"Code below uses good ole StandardFileStream to avoid m17n issues (this is binary data) and
  	also uses #unzipped since it works in older Squeaks"
  	stream := (StandardFileStream oldFileNamed: (self directory fullNameFor: fname)) asUnZippedStream.
- 	"stream := (RWBinaryOrTextStream with: contents) reset."
  	stream ifNil: [self error: 'Couldn''t open stream on checkpoint file!!'].
+ 	[map := stream fileInObjectAndCode] ensure: [stream close].
- 	[map := (stream fileInObjectAndCode) install arrayOfRoots first] ensure: [stream close].
  	self copyFrom: map!

Item was changed:
  ----- Method: SMSqueakMap>>extension (in category 'checkpoints') -----
+ 	^'rgz'!
- 	^'sgz'!

More information about the Squeak-dev mailing list