[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