[squeak-dev] The Trunk: System-dtl.1298.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Feb 3 00:48:07 UTC 2022


David T. Lewis uploaded a new version of System to project The Trunk:
http://source.squeak.org/trunk/System-dtl.1298.mcz

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

Name: System-dtl.1298
Author: dtl
Time: 2 February 2022, 7:44:42.546288 pm
UUID: 1bfeaec9-efde-4cea-a17a-19f6b1844306
Ancestors: System-ct.1297

For opening the sources file, reduce duplication of logic in locateSourcesEntry and openSources:forImage: and ensure that the full set of file paths is searched for stc compressed sources files prior to searching for regular sources files.

Also search for the sources file in well-known locations on some platforms. For Unix, if not found in the usual locations then look in /usr/share/squeak and /usr/local/share/squeak. Hooks for other platforms may be added to SmalltalkImage>>sourcesFilePaths, but may require VM support to identify suitable paths.

=============== Diff against System-ct.1297 ===============

Item was removed:
- ----- Method: FileDirectory class>>openChanges:forImage: (in category '*System-Files') -----
- openChanges: changesName forImage: imageName
- "find the changes file by looking in
- a) the directory derived from the image name
- b) the DefaultDirectory (which will normally be the directory derived from the image name or the SecurityManager's choice)
- If an old file is not found in either place, check for a read-only file in the same places. If that fails, return nil"
- 	| changes fd |
- 	"look for the changes file or an alias to it in the image directory"
- 	fd := FileDirectory on: (FileDirectory dirPathFor: imageName).
- 	(fd fileExists: changesName)
- 		ifTrue: [changes := fd oldFileNamed: changesName].
- 	changes ifNotNil:[^changes].
- 
- 	"look for the changes in the default directory"
- 	fd := DefaultDirectory.
- 	(fd fileExists: changesName)
- 		ifTrue: [changes := fd oldFileNamed: changesName].
- 	changes ifNotNil:[^changes].
- 
- 	"look for read-only changes in the image directory"
- 	fd := FileDirectory on: (FileDirectory dirPathFor: imageName).
- 	(fd fileExists: changesName)
- 		ifTrue: [changes := fd readOnlyFileNamed: changesName].
- 	changes ifNotNil:[^changes].
- 
- 	"look for read-only changes in the default directory"
- 	fd := DefaultDirectory.
- 	(fd fileExists: changesName)
- 		ifTrue: [changes := fd readOnlyFileNamed: changesName].
- 	"this may be nil if the last try above failed to open a file"
- 	^changes
- !

Item was removed:
- ----- Method: FileDirectory class>>openSources:andChanges:forImage: (in category '*System-Files') -----
- openSources: sourcesName andChanges: changesName forImage: imageName 
- 	"Open the changes and sources files and install them in SourceFiles. Inform the user of problems regarding write permissions or CR/CRLF mixups."
- 	"Note: SourcesName and imageName are full paths; changesName is a  
- 	local name."
- 	| sources changes msg wmsg |
- 	msg := 'Squeak cannot locate &fileRef.
- 
- Please check that the file is named properly and is in the
- same directory as this image.'.
- 	wmsg := 'Squeak cannot write to &fileRef.
- 
- Please check that you have write permission for this file.
- 
- You won''t be able to save this image correctly until you fix this.'.
- 
- 	sources := self openSources: sourcesName forImage: imageName.
- 	sources ifNotNil: [sources setConverterForCode].
- 	changes := self openChanges: changesName forImage: imageName.
- 	changes ifNotNil: [changes setConverterForCode].
- 
- 	((sources == nil or: [sources atEnd])
- 			and: [Preferences valueOfFlag: #warnIfNoSourcesFile])
- 		ifTrue: [Smalltalk platformName = 'Mac OS'
- 				ifTrue: [msg := msg , '
- Make sure the sources file is not an Alias.'].
- self inform: (msg copyReplaceAll: '&fileRef' with: 'the sources file named ' , sourcesName)].
- 
- 	(changes == nil
- 			and: [Preferences valueOfFlag: #warnIfNoChangesFile])
- 		ifTrue: [self inform: (msg copyReplaceAll: '&fileRef' with: 'the changes file named ' , changesName)].
- 
- 	((Preferences valueOfFlag: #warnIfNoChangesFile) and: [changes notNil])
- 		ifTrue: [changes isReadOnly
- 				ifTrue: [self inform: (wmsg copyReplaceAll: '&fileRef' with: 'the changes file named ' , changesName)].
- 
- 			((changes next: 200)
- 					includesSubstring: String crlf)
- 				ifTrue: [self inform: 'The changes file named ' , changesName , '
- has been injured by an unpacking utility.  Crs were changed to CrLfs.
- Please set the preferences in your decompressing program to 
- "do not convert text files" and unpack the system again.']].
- 
- 	SourceFiles := Array with: sources with: changes!

Item was removed:
- ----- Method: FileDirectory class>>openSources:forImage: (in category '*System-Files') -----
- openSources: fullSourcesName forImage: imageName 
- "We first do a check to see if a compressed version ofthe sources file is present.
- Open the .sources file read-only after searching in:
- a) the directory where the VM lives
- b) the directory where the image came from
- c) the DefaultDirectory (which is likely the same as b unless the SecurityManager has changed it).
- "
- 
- 	| sources fd sourcesName |
- 	(fullSourcesName endsWith: 'sources') ifTrue:
- 		["Look first for a sources file in compressed format."
- 		sources := self openSources: (fullSourcesName allButLast: 7) , 'stc'
- 						forImage: imageName.
- 		sources ifNotNil: [^ CompressedSourceStream on: sources]].
- 
- 	sourcesName := FileDirectory localNameFor: fullSourcesName.
- 	"look for the sources file or an alias to it in the VM's directory"
- 	fd := FileDirectory on: Smalltalk vmPath.
- 	(fd fileExists: sourcesName)
- 		ifTrue: [sources := fd readOnlyFileNamed: sourcesName].
- 	sources ifNotNil: [^ sources].
- 	"look for the sources file or an alias to it in the image directory"
- 	fd := FileDirectory on: (FileDirectory dirPathFor: imageName).
- 	(fd fileExists: sourcesName)
- 		ifTrue: [sources := fd readOnlyFileNamed: sourcesName].
- 	sources ifNotNil: [^ sources].
- 	"look for the sources in the current directory"
- 	fd := DefaultDirectory.
- 	(fd fileExists: sourcesName)
- 		ifTrue: [sources := fd readOnlyFileNamed: sourcesName].
- 	"sources may still be nil here"
- 	^sources
- !

Item was changed:
  ----- Method: SmalltalkImage>>locateSourcesEntry (in category 'image, changes names') -----
  locateSourcesEntry
+ 	^self locateSourcesEntry: self sourcesFileName.!
- 	| sourcesFilename |
- 	sourcesFilename := SourceFileVersionString , FileDirectory dot , 'sources'.
- 	^ {Smalltalk vmPath. 
- 	FileDirectory default fullName, FileDirectory slash}
- 		detect: [ : each | (each , sourcesFilename) asDirectoryEntry notNil ]
- 		ifFound: [ : foundPath | (foundPath , sourcesFilename) asDirectoryEntry ]
- 		ifNone: [ nil ]!

Item was added:
+ ----- Method: SmalltalkImage>>locateSourcesEntry: (in category 'image, changes names') -----
+ locateSourcesEntry: sourcesFilename
+ 	"Locate sources file entry, looking first in the VM path directory, then in the image
+ 	directory, and finally in some well-known locations for various OS platforms"
+ 
+ 	^ self sourcesFilePaths
+ 		detect: [ : each | (each , sourcesFilename) asDirectoryEntry notNil ]
+ 		ifFound: [ : foundPath | (foundPath , sourcesFilename) asDirectoryEntry ]
+ 		ifNone: [ nil ]!

Item was added:
+ ----- Method: SmalltalkImage>>openChanges:forImage: (in category 'image, changes names') -----
+ openChanges: changesName forImage: imageName
+ "find the changes file by looking in
+ a) the directory derived from the image name
+ b) the DefaultDirectory (which will normally be the directory derived from the image name or the SecurityManager's choice)
+ If an old file is not found in either place, check for a read-only file in the same places. If that fails, return nil"
+ 	| changes fd |
+ 	"look for the changes file or an alias to it in the image directory"
+ 	fd := FileDirectory on: (FileDirectory dirPathFor: imageName).
+ 	(fd fileExists: changesName)
+ 		ifTrue: [changes := fd oldFileNamed: changesName].
+ 	changes ifNotNil:[^changes].
+ 
+ 	"look for the changes in the default directory"
+ 	fd := FileDirectory default.
+ 	(fd fileExists: changesName)
+ 		ifTrue: [changes := fd oldFileNamed: changesName].
+ 	changes ifNotNil:[^changes].
+ 
+ 	"look for read-only changes in the image directory"
+ 	fd := FileDirectory on: (FileDirectory dirPathFor: imageName).
+ 	(fd fileExists: changesName)
+ 		ifTrue: [changes := fd readOnlyFileNamed: changesName].
+ 	changes ifNotNil:[^changes].
+ 
+ 	"look for read-only changes in the default directory"
+ 	fd := FileDirectory default.
+ 	(fd fileExists: changesName)
+ 		ifTrue: [changes := fd readOnlyFileNamed: changesName].
+ 	"this may be nil if the last try above failed to open a file"
+ 	^changes
+ !

Item was changed:
  ----- Method: SmalltalkImage>>openSourceFiles (in category 'sources, changes log') -----
  openSourceFiles
- 
  	self imageName = LastImageName ifFalse:
  		["Reset the author initials to blank when the image gets moved"
  		LastImageName := self imageName.
  		Utilities authorInitials: ''].
+ 	self
+ 		openSourcesAndChanges: self changesName
- 	FileDirectory
- 		openSources: self sourcesName
- 		andChanges: self changesName
  		forImage: LastImageName.
  	SourceFileArray install!

Item was added:
+ ----- Method: SmalltalkImage>>openSources (in category 'image, changes names') -----
+ openSources
+ 	"Open a sources file from one of several possible locations. Check first for
+ 	a compressed sources file and use that if available."
+ 
+ 	(self classNamed: #CompressedSources)
+ 		ifNotNil: [ :cls | cls cachedSources
+ 			ifNotNil: [ :src | ^src ]].
+ 	(self locateSourcesEntry: self sourcesCompressedFileName)
+ 		ifNotNil: [ :entry | ^ CompressedSourceStream on: entry readStream ].
+ 	(self locateSourcesEntry: self sourcesFileName)
+ 		ifNotNil: [ :entry | ^ entry readStream ].
+ 	^nil.
+ !

Item was added:
+ ----- Method: SmalltalkImage>>openSourcesAndChanges:forImage: (in category 'image, changes names') -----
+ openSourcesAndChanges: changesName forImage: imageName 
+ 	"Open the changes and sources files and install them in SourceFiles. Inform the user of problems regarding write permissions or CR/CRLF mixups."
+ 	"Note: SourcesName and imageName are full paths; changesName is a  
+ 	local name."
+ 	| sources changes msg wmsg |
+ 	msg := 'Squeak cannot locate &fileRef.
+ 
+ Please check that the file is named properly and is in the
+ same directory as this image.'.
+ 	wmsg := 'Squeak cannot write to &fileRef.
+ 
+ Please check that you have write permission for this file.
+ 
+ You won''t be able to save this image correctly until you fix this.'.
+ 
+ 	sources := Smalltalk openSources.
+ 	sources ifNotNil: [sources setConverterForCode].
+ 	changes := Smalltalk openChanges: changesName forImage: imageName.
+ 	changes ifNotNil: [changes setConverterForCode].
+ 
+ 	((sources == nil or: [sources atEnd])
+ 			and: [Preferences valueOfFlag: #warnIfNoSourcesFile])
+ 		ifTrue: [Smalltalk platformName = 'Mac OS'
+ 				ifTrue: [msg := msg , '
+ Make sure the sources file is not an Alias.'].
+ self inform: (msg copyReplaceAll: '&fileRef' with: 'the sources file named ' , self sourcesName)].
+ 
+ 	(changes == nil
+ 			and: [Preferences valueOfFlag: #warnIfNoChangesFile])
+ 		ifTrue: [self inform: (msg copyReplaceAll: '&fileRef' with: 'the changes file named ' , changesName)].
+ 
+ 	((Preferences valueOfFlag: #warnIfNoChangesFile) and: [changes notNil])
+ 		ifTrue: [changes isReadOnly
+ 				ifTrue: [self inform: (wmsg copyReplaceAll: '&fileRef' with: 'the changes file named ' , changesName)].
+ 
+ 			((changes next: 200)
+ 					includesSubstring: String crlf)
+ 				ifTrue: [self inform: 'The changes file named ' , changesName , '
+ has been injured by an unpacking utility.  Crs were changed to CrLfs.
+ Please set the preferences in your decompressing program to 
+ "do not convert text files" and unpack the system again.']].
+ 
+ 	SourceFiles := Array with: sources with: changes!

Item was added:
+ ----- Method: SmalltalkImage>>sourcesCompressedFileName (in category 'image, changes names') -----
+ sourcesCompressedFileName
+ 	^SourceFileVersionString , FileDirectory dot, 'stc'
+ !

Item was added:
+ ----- Method: SmalltalkImage>>sourcesFileName (in category 'image, changes names') -----
+ sourcesFileName
+ 	^SourceFileVersionString , FileDirectory dot , 'sources'
+ !

Item was added:
+ ----- Method: SmalltalkImage>>sourcesFilePaths (in category 'image, changes names') -----
+ sourcesFilePaths
+ 	"A list of likely locations for the sources file. Look first in the VM path directory, then
+ 	in the image directory, and finally in some well-known locations for this OS platform"
+ 
+ 	| paths vmPath imagePath defaultPath |
+ 	paths := OrderedCollection new.
+ 	paths add: (vmPath := self vmPath).
+ 	paths add: (imagePath := self imagePath, FileDirectory slash).
+ 	imagePath = (defaultPath := FileDirectory default fullName, FileDirectory slash)
+ 		ifFalse: ["imagePath and defaultPath are usually the same"
+ 			paths add: defaultPath].
+ 	('/usr/*/lib/*' match: vmPath)
+ 		ifTrue: ["Unix platform with VM installed in system directories"
+ 			paths
+ 				add: '/usr/share/squeak/';
+ 				add: '/usr/local/share/squeak/' ].
+ 	"Well known paths for other platform types may be added here"
+ 
+ 	^paths
+ !

Item was changed:
  ----- Method: SmalltalkImage>>sourcesName (in category 'image, changes names') -----
  sourcesName
  	"Answer the full path to the version-stable source code if it exists, otherwise the desired location"
  	^ self locateSourcesEntry
+ 		ifNil: [ self vmPath , self sourcesFileName ]
- 		ifNil: [ self vmPath , SourceFileVersionString , FileDirectory dot , 'sources' ]
  		ifNotNil: [ : entry | entry fullName ]!



More information about the Squeak-dev mailing list