[Pharo-dev] Add download+uncompress behavior to Metacello?

stepharo stepharo at free.fr
Tue Apr 19 09:47:26 EDT 2016


packaged them first :)

Stef

Le 19/4/16 15:14, Hernán Morales Durand a écrit :
>
> Is there a chance to get this methods (or any better versions of them) 
> added to Metacello?
>
> >>extractZip: fileRef in: dst
>     " If fileRef is a ZIP archive, uncompress its contents in dst and 
> delete it "
>
>     | zipArchive |
>     (fileRef fullName endsWith: '.zip')
>         ifFalse: [ ^ self ].
>     zipArchive := ZipArchive new.
>     [ zipArchive
>         readFrom: fileRef fullName;
>         extractAllTo: dst ]
>         ensure: [ zipArchive close ].
>     fileRef delete
>
>
> >>extractGZip: fileRef in: dst
>     " If fileRef is a ZIP archive, uncompress its contents in dst and 
> delete it "
>
>     | unzipped |
>     (fileRef fullName endsWith: '.gz')
>         ifFalse: [ ^ self ].
>     unzipped := GZipReadStream unzip: fileRef basename to: dst.
>     (Smalltalk hasClassNamed: #OSProcess)
>         ifTrue: [
>             (Smalltalk at: #OSProcess) thisOSProcess 
> waitForCommandOutput: 'tar xvf ' , unzipped asFileReference fullName.
>             fileRef delete.
>             unzipped asFileReference delete ]
>
> >>uncompress: fileRef
>     " Private - Uncompress fileRef to the current working directory "
>
>     | dst |
>     dst := FileSystem workingDirectory.
>     self extractZip: fileRef in: dst.
>     self extractGZip: fileRef in: dst.
>
> >>downloadResourcesFrom: urlString
>     " Private - Download files from urlString "
>
>     ^ [ ZnEasy get: urlString ]
>         on: ZnEntityTooLarge
>         do: [ : ex | ex resume  ].
>
>
> I use them to download external resources for my projects as follows:
>
> First I add a #preLoadDoIt: send in my baseline:
>
>     spec for: #'common' do: [
>         spec blessing: #'baseline'.
>         spec preLoadDoIt: #preLoad.
>          ....
>
> >>preLoad
>
>     | url fileRef response |
>
>     self logCr: '====== Downloading my resource files...'.
>     url := self platformFilesUrl asZnUrl.
>     fileRef := FileSystem disk workingDirectory / url pathSegments last.
>     (response := self downloadResourcesFrom: url) isSuccess
>         ifTrue: [
>             self logCr: '====== Writing resource file...'.
>             fileRef writeStreamDo: [ : stream | stream nextPutAll: 
> response contents ] ]
>         ifFalse: [ self error: 'Cannot download data files' ].
>     self logCr: '====== Uncompressing files...'.
>     self uncompress: fileRef.
>
> Hernán
>




More information about the Pharo-dev mailing list