[Pkg] Rio: File-Base-kph.11.mcz

squeak-dev-noreply at lists.squeakfoundation.org squeak-dev-noreply at lists.squeakfoundation.org
Tue Feb 17 22:37:51 UTC 2009


A new version of File-Base was added to project Rio:
http://www.squeaksource.com/Rio/File-Base-kph.11.mcz

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

Name: File-Base-kph.11
Author: kph
Time: 17 February 2009, 10:37:49 pm
UUID: c6de421c-25e1-4c06-802d-7a439bf81a1d
Ancestors: File-Base-test.10

+ storeOn: (for when a file is stored in Bob metadata file.
+ fileMatching:
+ resolveMatchAll
+ resolveMatchOne
	'file.*' asFile resolveMatchOne - "find one file that matches"
+ some archive support


=============== Diff against File-Base-test.10 ===============

Item was added:
+ ----- Method: FileArchiveExecutive>>addAll:relativeTo:toDir: (in category 'as yet unclassified') -----
+ addAll: someFD relativeTo: aBaseDir toDir: aDir
+ 	
+ 	^ aDir executive toDir: aDir addAllFromArchive: someFD relativeTo: aBaseDir.!

Item was changed:
  ----- Method: FileArchive>>commit (in category 'public') -----
  commit
  
  	"Catch attempts to overwrite existing zip file"
  	(executive archive canWriteToFileNamed: self asString)
  		ifFalse: [ ^ self error: 'a member of this archive is using this file: ',  self  ].
  	
+ 	executive members keysAndValuesDo: [ :rio :file | 
+ 			rio class = File 			ifTrue: [ (self archive addFile: file asVmPathName as: rio asVmPathName)
+ 												unixFileAttributes: 16r81A4.
+ 							 ].
+ 			rio class = Directory 	ifTrue: [ (self archive addDirectory: rio asVmPathName)
+ 												unixFileAttributes: 16r41ED.
+ 					 	].
+ 	].
+ 	
+ 	self file binary writer: [ :stream |
- 	self writer: [ :stream |
  		self archive writeTo: stream.
  	].!

Item was added:
+ ----- Method: FileFtpExecutive>>password (in category 'ftp client') -----
+ password
+ 
+ 	self user = 'ftp' ifTrue: [ ^ 'anon' ].
+ 	
+ 	^ super password!

Item was added:
+ ----- Method: File class>>newDirectoryFrom: (in category 'as yet unclassified') -----
+ newDirectoryFrom: aPath
+ 	                                                                                                            	
+ 	^ self defaultExecutive current class newDirectoryFrom: aPath!

Item was added:
+ ----- Method: FileArchiveExecutive>>memberFile: (in category 'as yet unclassified') -----
+ memberFile: aFile
+ 	
+ 	^ archive members detect: [ :member | aFile asVmPathName = member fileName ] ifNone: [ nil ] !

Item was added:
+ ----- Method: File>>fileMatching: (in category 'enumeration') -----
+ fileMatching: aos
+ 
+ 	| list |
+ 	list := self filesMatching: aos.
+ 	
+ 	list size > 1 ifTrue: [ ^ nil ].
+ 	
+ 	^ list firstOrNil!

Item was changed:
  ----- Method: FileArchiveExecutive>>isDirectory: (in category 'as yet unclassified') -----
  isDirectory: aRio
  
+ 	| |
- 	| dir |
  	
+ 	aRio isEmpty ifTrue:[ ^ true ].
- 	dir := aRio value, '/'.
  	
+ 	^ (self members at: aRio ifAbsent: [ nil ]) class = Directory.!
- 	^ (archive members detect: [ :member | dir = member fileName ] ifNone: [ ^false ]) isDirectory!

Item was added:
+ ----- Method: FileArchiveExecutive>>memberDir: (in category 'as yet unclassified') -----
+ memberDir: aDir
+ 	
+ 	| n |
+ 	n := aDir asVmPathName, '/'.
+ 	
+ 	^ archive members detect: [ :member | n = member fileName ] ifNone: [ nil ] !

Item was added:
+ ----- Method: Directory>>storeOn: (in category 'directory/container actions') -----
+ storeOn: aStream 
+ 
+ 	aStream 
+ 		print: self asUrl printString;
+ 		nextPutAll: ' asDirectory'!

Item was added:
+ ----- Method: FileArchiveExecutive>>tmpFileFor: (in category 'as yet unclassified') -----
+ tmpFileFor: aRio
+ 
+ 	| tmp |
+ 	 
+ 	tmp := File tmp.
+ 	
+ 	(self memberFile: aRio)
+ 		ifNotNilDo: [ :m | m extractToFileNamed: tmp filename inDirectory: tmp parent asFileDirectory ].
+ 	
+ 	^ tmp!

Item was added:
+ ----- Method: FileRemoteExecutive>>isRemote (in category 'as yet unclassified') -----
+ isRemote
+ 
+ 	^ true!

Item was added:
+ ----- Method: FileArchiveExecutive>>basicReader: (in category 'as yet unclassified') -----
+ basicReader: aRio
+ 
+ 	| tmp |
+ 	
+ 	tmp := members at: aRio put: (self tmpFileFor: aRio).
+ 
+ 	^ super basicReader: tmp!

Item was changed:
  ----- Method: FileArchiveExecutive>>startAt:recursively:select:into: (in category 'as yet unclassified') -----
  startAt: rioOrString recursively: beRecursive select: selectBlock into: results 
  
  	"this unpleasent method repackages the flat archive as a hierarchical structure that
  	can be recursively traversed like a normal directory."
  	
  	| membersBelow subDirs dir |
  	
+  	membersBelow := archive members.
-  	membersBelow := self members.
  	
   	rioOrString isEmpty
  		ifTrue: [ 
  			dir := ''.
  			]
  		ifFalse: [ 
  			dir := rioOrString value.
  			dir last ~= $/ ifTrue: [ dir := dir , '/' ].
   			membersBelow := membersBelow select: [ :member | 
  				(member fileName ~= dir) and: [member fileName beginsWith: dir]
  			].
  	].
  
  	subDirs := membersBelow select: [ :member | 
  		| pathBelow entry |
  		pathBelow := member fileName allButFirst: dir size. 
  		pathBelow last = $/ ifTrue: [ pathBelow := pathBelow allButLast ].
  		(pathBelow includes: $/) 
  			ifFalse: [
  				
  				
  				entry := member isDirectory 
+ 					ifTrue: [ self class dirClass executive: self value: member fileName ]
+ 					ifFalse: [ self class fileClass executive: self value: member fileName ].
- 					ifTrue: [ self class makeNew: self class dirClass from: member fileName ]
- 					ifFalse: [ self class makeNew: self class fileClass from: member fileName ].
  				
  				entry setStatFromDir: rioOrString andEntryArray: 
  					(Array 
  						with: pathBelow
  						with: "member lastModTime" 0
  						with: "member lastModTime" 0 
  						with: member isDirectory).
  				(selectBlock value: entry) ifTrue: [ results add: entry ].
  				false 
  			] 
  			ifTrue: [ true ].
  	].
  
  	beRecursive ifTrue: [
  		subDirs do: [ :aDir |
  			self startAt: aDir fileName recursively: beRecursive select: selectBlock into: results 
  		].
  	]. 	 
  	
  	^ results!

Item was added:
+ ----- Method: File>>storeOn: (in category 'store') -----
+ storeOn: aStream 
+ 
+ 	aStream 
+ 		print: self asUrl printString;
+ 		nextPutAll: ' asFile'!

Item was added:
+ ----- Method: File>>asFileDirectory (in category 'public modes') -----
+ asFileDirectory
+ 	"old style"
+ 	^ FileDirectory on: (FileDirectory default fullNameFor: self asVmPathName)
+ !

Item was changed:
  ----- Method: FileHttpExecutive class>>canInstanciateFrom: (in category 'as yet unclassified') -----
  canInstanciateFrom: aPathString
  
+ 	^ ('http://*' match: aPathString) ifTrue: [ 100 ] ifFalse: [ 0 ]!
- 	^ aPathString beginsWith: 'http:'!

Item was added:
+ ----- Method: File>>asMatchedList (in category 'enumeration') -----
+ asMatchedList
+ 
+ 	^ self parent filesMatching: self filename!

Item was added:
+ ----- Method: FileArchive>>newFrom: (in category 'accessing') -----
+ newFrom: pathOrFileOrDirectory
+ 
+ 	^ Directory executive: executive value: pathOrFileOrDirectory!

Item was changed:
  ----- Method: FileFtpExecutive class>>canInstanciateFrom: (in category 'as yet unclassified') -----
  canInstanciateFrom: aPathString
  
+ 	^ ('ftp://*' match: aPathString) ifTrue: [ 100 ] ifFalse: [ 0 ]!
- 	^ aPathString beginsWith: 'ftp:'!

Item was added:
+ ----- Method: File>>resolveMatchOne (in category 'enumeration') -----
+ resolveMatchOne
+ 
+ 	| list |
+ 	list :=self parent filesMatching: self fileName.
+ 	list size = 1 ifFalse: [ ^ nil ].
+ 	^ list first
+ !

Item was added:
+ ----- Method: FileArchiveExecutive>>toDirLocal:addAllFromArchive:relativeTo: (in category 'as yet unclassified') -----
+ toDirLocal: aDir addAllFromArchive: someFD relativeTo: aBaseDir
+ 
+ 	archive members select: [ :m |			
+ 		m isDirectory and: [ someFD includes: (m localFileName allButLast) ]		
+ 	] thenDo: [ :m |
+ 		(aBaseDir / m localFileName allButLast) mkpath.
+ 	].
+ 
+ 	archive members select: [ :m |			
+ 		m isDirectory not and: [ someFD includes: (m localFileName) ]		
+ 	] thenDo: [ :m |
+ 		m extractTo: (aBaseDir / m localFileName) asVmPathName.
+ 	].
+ !

Item was added:
+ ----- Method: FileArchive>>readArchive (in category 'accessing') -----
+ readArchive
+ 
+ 	^ self archive readFrom: self file asVmPathName
+ 	
+ 	!

Item was changed:
  ----- Method: File>>zip (in category 'public modes') -----
  zip
  
  	^ (FileArchive on: self) setArchive: ZipArchive new; yourself!

Item was changed:
  ----- Method: Directory>>addTree: (in category 'directory/container actions') -----
  addTree: aDir
  	
  	self validateIsContainer.
  	aDir validateIsDirectory.
  		
+ 	^ self addAll: (aDir all entries addFirst: aDir asDirectory; yourself) relativeTo: aDir parent.
- 	^ self addAll: (aDir all entries addFirst: aDir; yourself) relativeTo: aDir parent.
  	
   	 !

Item was added:
+ ----- Method: FileArchiveExecutive>>createDirectory: (in category 'as yet unclassified') -----
+ createDirectory: aRio
+ 	 
+ 	^ members at: aRio put: nil!

Item was added:
+ ----- Method: File class>>newFileFrom: (in category 'as yet unclassified') -----
+ newFileFrom: aPath
+ 	                                                                                                            	
+ 	^ self defaultExecutive current class newFileFrom: aPath!

Item was changed:
  ----- Method: FileArchiveExecutive>>members (in category 'as yet unclassified') -----
  members 
  
+ 	| m ms |
+ 	
+ 	members ifNil: [
+ 		ms := (archive members ifNil: [ 
+ 					file binary reader: [ :str | archive readFrom: str ].
+ 					archive members ])  collect: [ :ea | 
+ 			
+ 			m := nil.
+ 			
+ 			ea isDirectory ifTrue: [ m := Directory executive: self value: ea localFileName ].
+ 			ea isFile ifTrue: [ m := File executive: self value: ea localFileName ].
+ 				
+ 			m.	
+ 		].
+ 
+ 		members := Dictionary new.
+ 		ms reject: [ :ea | ea isNil ] thenDo: [ :ea | members at: ea put: nil ].
+ 	].
+ 
+ 	^ members!
- 	^ members ifNil: [ 
- 		file reader: [ :str | archive readFrom: str ].
- 		members := archive members.
- 	]!

Item was added:
+ ----- Method: FileArchiveExecutive>>basicWriter: (in category 'as yet unclassified') -----
+ basicWriter: aRio
+ 
+ 	| tmp |
+ 	
+ 	tmp := members at: aRio asFile put: (self tmpFileFor: aRio).
+ 
+ 	^ super basicWriter: tmp!

Item was added:
+ ----- Method: File>>resolveMatchAll (in category 'enumeration') -----
+ resolveMatchAll
+ 
+ 	^ self parent filesMatching: self filename!

Item was removed:
- ----- Method: File>>basicWriter (in category 'public file') -----
- basicWriter
- 	
- 	self statIsNowInvalid.
- 	
- 	^ super basicWriter
- 	!

Item was removed:
- ----- Method: FileArchive>>writeStream (in category 'public') -----
- writeStream
- 
- 	^ self file writeStream!

Item was removed:
- ----- Method: File>>statIsNowInvalid (in category 'accessing') -----
- statIsNowInvalid
- 
- 	"All rios copyied from this one, share a stat instance if it exists. 
- 	Invalidating that instance means that this and all such derived rios, 
- 	will refresh their stat when needed."
- 	
- 	stat ifNotNil: [ stat invalidate ].
- 
- !

Item was removed:
- ----- Method: FileArchiveExecutive>>toDir:addAllLocal:relativeTo: (in category 'as yet unclassified') -----
- toDir: aDir addAllLocal: someFD relativeTo: aBaseDir
- 	
- 	^ someFD do: [ :aFD | 
- 		
- 		aBaseDir ifNotNil: [ self archive: aDir add: aFD relativeTo: aBaseDir ]
- 				 ifNil: [ self archive: aDir add: aFD   ]
- 	]!

Item was removed:
- ----- Method: File>>archive (in category 'public modes') -----
- archive
- 
- 	^ self zip!



More information about the Packages mailing list