# HG changeset patch # User penk # Date 1031239974 -7200 # Node ID d71273e1fc2e05d2498aa4f87ed6734b894b522e # Parent 629a6e0ae68ad4a3e69eea5edffb2ff27bb0b9b7 *** empty log message *** diff -r 629a6e0ae68a -r d71273e1fc2e Archiver.st --- a/Archiver.st Thu Sep 05 17:31:29 2002 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,693 +0,0 @@ -"{ Package: 'stx:libtool2' }" - -Object subclass:#Archiver - instanceVariableNames:'process temporaryDirectory fileName outStream errorStream - synchron' - classVariableNames:'' - poolDictionaries:'' - category:'System-Support-FileFormats' -! - -Archiver subclass:#GZipArchive - instanceVariableNames:'' - classVariableNames:'' - poolDictionaries:'' - privateIn:Archiver -! - -Archiver subclass:#TarArchive - instanceVariableNames:'fileName' - classVariableNames:'' - poolDictionaries:'' - privateIn:Archiver -! - -Archiver subclass:#TarGZipArchive - instanceVariableNames:'tarArchiver tarFile' - classVariableNames:'' - poolDictionaries:'' - privateIn:Archiver -! - - -!Archiver class methodsFor:'instance creation'! - -with:aFilename - - | instance | - - instance := self new. - instance fileName:aFilename. - ^ instance -! ! - -!Archiver class methodsFor:'classAccess'! - -gzipArchive - - ^ GZipArchive -! - -tarArchive - - ^ TarArchive -! - -tarGZipArchive - - ^ TarGZipArchive -! ! - -!Archiver class methodsFor:'common options'! - -MinusSign - - ^ $- -! - -PipeSign - - ^ $> -! ! - -!Archiver methodsFor:'accessing'! - -errorStream - "return the value of the instance variable 'errorStream' (automatically generated)" - - ^ errorStream -! - -errorStream:something - "set the value of the instance variable 'errorStream' (automatically generated)" - - errorStream := something. -! - -fileName - "return the value of the instance variable 'fileName' (automatically generated)" - - ^ fileName -! - -fileName:something - "set the value of the instance variable 'fileName' (automatically generated)" - - fileName := something. -! - -outStream - "return the value of the instance variable 'outStream' (automatically generated)" - - ^ outStream -! - -outStream:something - "set the value of the instance variable 'outStream' (automatically generated)" - - outStream := something. -! - -process - "return the value of the instance variable 'process' (automatically generated)" - - ^ process -! - -process:something - "set the value of the instance variable 'process' (automatically generated)" - - process := something. -! - -synchron - "return the value of the instance variable 'synchron' (automatically generated)" - - ^ synchron -! - -synchron:something - "set the value of the instance variable 'synchron' (automatically generated)" - - synchron := something. -! - -temporaryDirectory - "return the value of the instance variable 'temporaryDirectory' (automatically generated)" - - temporaryDirectory isNil ifTrue:[ - temporaryDirectory := Filename newTemporary. - temporaryDirectory makeDirectory. - ]. - ^ temporaryDirectory -! ! - -!Archiver methodsFor:'actions'! - -addFilesToArchiv:colOfFiles - - self subclassResponsibility. -! - -extractTo:aColOfFiles - - self subclassResponsibility. -! - -listFilesFromArchiv - - self subclassResponsibility. -! - -removeFilesFromArchiv:aColOfFiles - - self subclassResponsibility. -! ! - -!Archiver methodsFor:'actions private'! - -removeTemporaryDirectory - - | tmp | - - temporaryDirectory notNil ifTrue:[ - tmp := self temporaryDirectory. - (FileDirectory directoryNamed:(tmp directory)) removeDirectory:tmp baseName. - temporaryDirectory := nil. - ]. -! - -stopProcess - - process notNil ifTrue:[ - process terminateWithAllSubprocesses. - process waitUntilTerminated. - ]. -! ! - -!Archiver methodsFor:'command execution'! - -executeCommand:cmd directory:aDirectory - - - synchron isNil ifTrue:[synchron := true]. - synchron ifTrue:[ - OperatingSystem - executeCommand:cmd - inputFrom:nil - outputTo:outStream - errorTo:errorStream - inDirectory:aDirectory - lineWise:true - onError:[:status| false]. - ] ifFalse:[ - process := Process for:[ - [ - OperatingSystem - executeCommand:cmd - inputFrom:nil - outputTo:outStream - errorTo:errorStream - inDirectory:aDirectory - lineWise:true - onError:[:status| false]. - ] - valueNowOrOnUnwindDo:[ - process := nil. - ]. - - ] priority:(Processor systemBackgroundPriority). - process name:('ArchivFileCommand command >', cmd). - process resume. - ] -! - -outStream:aOutStream errorStream:aErrorStream - - outStream := aOutStream. - errorStream := aErrorStream. -! - -outStream:aOutStream errorStream:aErrorStream synchron:aBoolean - - outStream := aOutStream. - errorStream := aErrorStream. - synchron := aBoolean -! ! - -!Archiver methodsFor:'initialization & release'! - -release - - self stopProcess. - self removeTemporaryDirectory. -! ! - -!Archiver::GZipArchive class methodsFor:'zip archiv command options'! - -GZipArchivFileOption - ^ 'f' -! - -GZipArchivUnzipCommand - ^ 'gunzip' -! - -GZipArchivWriteToStdioOption - ^ 'c' -! - -GZipArchivZipCommand - ^ 'gzip' -! ! - -!Archiver::GZipArchive methodsFor:'actions'! - -unzipTo:aDirectory - - | cmd file newFile| - - (aDirectory exists not) ifTrue:[ - DialogBox warn:'cant unzip to not existing directory ', aDirectory asString. - ]. - (aDirectory isDirectory not) ifTrue:[ - DialogBox warn:'cant unzip to file ', aDirectory asString. - ]. - file := self fileName. - (file directory asString = aDirectory asString) ifFalse:[ - file copyTo:(aDirectory construct:(file baseName)). - ]. - newFile := aDirectory construct:(file baseName). - cmd := self getUnzipCommandForFile:newFile. - self executeCommand:cmd directory:aDirectory. -! - -zipFile:aFile to:newFile - - | cmd directory| - - directory := newFile directory. - (directory exists not) ifTrue:[ - DialogBox warn:'cant unzip to not existing directory ', directory asString. - ]. - (directory isDirectory not) ifTrue:[ - DialogBox warn:'cant unzip to file ', directory asString. - ]. - cmd := self getZipCommandForFile:aFile to:newFile. - self executeCommand:cmd directory:directory. - newFile exists ifTrue:[ - self fileName:newFile. - ]. -! ! - -!Archiver::GZipArchive methodsFor:'command strings'! - -getUnzipCommand - - | stream cmd| - - stream := WriteStream on:''. - stream nextPutAll:self class GZipArchivUnzipCommand. - stream space. - stream nextPutAll:self fileName baseName. - cmd := stream contents. - stream close. - ^ cmd -! - -getUnzipCommandForFile:aFileName - - | stream cmd| - - stream := WriteStream on:''. - stream nextPutAll:self class GZipArchivUnzipCommand. - stream space. - stream nextPutAll:aFileName asString. - cmd := stream contents. - stream close. - ^ cmd -! - -getZipCommandForFile:aFileName - - | stream cmd| - - stream := WriteStream on:''. - stream nextPutAll:self class GZipArchivZipCommand. - stream space. - stream nextPutAll:aFileName asString. - cmd := stream contents. - stream close. - ^ cmd -! - -getZipCommandForFile:aFile to:newFile - | stream cmd| - - stream := WriteStream on:''. - stream nextPutAll:self class GZipArchivZipCommand. - stream space. - stream nextPut:self class MinusSign. - stream nextPutAll:self class GZipArchivWriteToStdioOption. - stream space. - stream nextPutAll:aFile asString. - stream space. - stream nextPut:self class PipeSign. - stream space. - stream nextPutAll:newFile asString. - cmd := stream contents. - stream close. - ^ cmd -! ! - -!Archiver::TarArchive class methodsFor:'command strings'! - -TarArchivAddOption - ^ 'r' -! - -TarArchivCommand - ^ 'tar' -! - -TarArchivDeleteOption - ^ '--delete' -! - -TarArchivFileOption - ^ 'f' -! - -TarArchivListContentsOption - ^ 't' -! - -TarArchivListOptions - ^ self TarArchivListContentsOption , self TarArchivVerboseOption - , self TarArchivFileOption -! - -TarArchivListZippedOptions - ^ self TarArchivListContentsOption , self TarArchivVerboseOption - , self TarArchivFileOption , self TarArchivZipOption -! - -TarArchivUnpackInDirectoryOption - ^ '-C ' -! - -TarArchivUnpackOption - ^ 'x' -! - -TarArchivVerboseOption - ^ 'v' -! - -TarArchivZipOption - ^ 'z' -! ! - -!Archiver::TarArchive methodsFor:'actions'! - -addFilesToArchiv:colOfFiles - - | cmd tempDir archivFile archivInTemp| - - tempDir := self temporaryDirectory. - archivFile := self fileName. - archivInTemp := tempDir construct:(archivFile baseName). - "/ copy files to be added to tempDir - colOfFiles do:[ :file | - file recursiveCopyTo:(tempDir construct:(file baseName)) - ]. - - "/ copy tar archiv to tempDir - archivFile copyTo:archivInTemp. - - "/ addFiles to the tar archive - cmd := self getAddFilesToTarArchiveCommandForArchiv:archivInTemp with:colOfFiles. - self executeCommand:cmd directory:tempDir. - - "/ copy tar archiv back - archivInTemp copyTo:(self fileName). -! - -extractTo:aDirectory - - ^ self extractTo:aDirectory with:nil -! - -extractTo:aDirectory with:files - - |execDir cmd| - - execDir := self fileName directory. - cmd := self getExtractSelectedFilesCommandForDirectory:aDirectory withSelection:files. - self executeCommand:cmd directory:execDir. -! - -extractWithOutDirectoryTo:aDirectory with:files - - |execDir tempDir tempFile| - - execDir := self fileName directory. - tempDir := self temporaryDirectory. - self extractTo:tempDir with:files. - files do:[ : aFileString | - tempFile := self temporaryDirectory construct:aFileString. - tempFile exists ifTrue:[ - tempFile recursiveCopyTo:(aDirectory construct:(aFileString fileName asFilename baseName)). - ]. - ]. -! - -listFilesFromArchiv - - self listFilesFromArchiv:nil -! - -listFilesFromArchiv:newColOfFiles - - | cmd dir| - - self fileName isNil ifTrue:[ ^ self]. - dir := self fileName directory. - cmd := self getFileListFromArchivCommand:newColOfFiles. - self executeCommand:cmd directory:dir -! - -removeFilesFromArchiv:aColOfFiles - - |cmd| - - cmd := self getRemoveFilesFromTarArchivFor:aColOfFiles. - self executeCommand:cmd directory:(self fileName directory). -! ! - -!Archiver::TarArchive methodsFor:'command strings'! - -getAddFilesToTarArchiveCommand:aColOfFiles - |filename cmd stream| - - filename := self fileName. - filename exists ifTrue:[ - stream := WriteStream on:''. - stream nextPutAll:self class TarArchivCommand. - stream space. - stream nextPutAll:self class TarArchivAddOption. - stream nextPutAll:self class TarArchivFileOption. - stream space. - stream nextPutAll:filename asString. - aColOfFiles do:[:el | - stream space. - stream nextPutAll:(el asString) - ]. - cmd := stream contents - ]. - ^ cmd -! - -getAddFilesToTarArchiveCommandForArchiv:archivFile with:aColOfFiles - | cmd stream| - - archivFile exists ifTrue:[ - stream := WriteStream on:''. - stream nextPutAll:self class TarArchivCommand. - stream space. - stream nextPutAll:self class TarArchivAddOption. - stream nextPutAll:self class TarArchivFileOption. - stream space. - stream nextPutAll:archivFile asString. - aColOfFiles do:[:el | - stream space. - stream nextPutAll:(el baseName) - ]. - cmd := stream contents - ]. - ^ cmd -! - -getExtractSelectedFilesCommandForDirectory:dir withSelection:sel - | stream cmd| - - stream := WriteStream on:''. - stream nextPutAll:self class TarArchivCommand. - stream space. - stream nextPutAll:self class TarArchivUnpackOption. - stream nextPutAll:self class TarArchivFileOption. - stream space. - stream nextPutAll:self fileName asString. - stream space. - stream nextPutAll:self class TarArchivUnpackInDirectoryOption. - stream space. - stream nextPutAll:dir asString. - sel notNil ifTrue:[ - sel do:[:el | - stream space. - stream nextPutAll:(el fileName asString) - ]. - ]. - cmd := stream contents. - stream close. - ^ cmd -! - -getFileListFromArchivCommand:aColOfFiles - - | stream cmd| - - stream := WriteStream on:''. - stream nextPutAll:self class TarArchivCommand. - stream space. - stream nextPutAll:self class TarArchivListOptions. - stream space. - stream nextPutAll:self fileName baseName. - aColOfFiles notNil ifTrue:[ - aColOfFiles do:[:el | - stream space. - stream nextPutAll:(el baseName) - ] - ]. - cmd := stream contents. - stream close. - ^ cmd -! - -getRemoveFilesFromTarArchivFor:sel - | stream filename| - - filename := self fileName. - filename exists ifTrue:[ - stream := WriteStream on:''. - stream nextPutAll:self class TarArchivCommand. - stream space. - stream nextPutAll:self class TarArchivDeleteOption. - stream space. - stream nextPut:self class MinusSign. - stream nextPutAll:self class TarArchivFileOption. - stream space. - stream nextPutAll:filename asString. - sel do:[:el | - stream space. - stream nextPutAll:el - ]. - ^ stream contents - ] -! ! - -!Archiver::TarGZipArchive methodsFor:'accessing'! - -fileName:aFile - - | tempDir file gzipArchiver suffix| - - super fileName:aFile. - " unzip file in tempDirectory and do all the things with tar file " - tempDir := self temporaryDirectory. - gzipArchiver := Archiver::GZipArchive with:(self fileName). - gzipArchiver unzipTo:tempDir. - suffix := self fileName suffix. - file := self fileName withoutSuffix. - file := file baseName. - suffix = 'tgz' ifTrue:[ - file := file , '.tar' - ]. - tarFile := self temporaryDirectory construct:file. - tarArchiver := TarArchive with:tarFile. -! ! - -!Archiver::TarGZipArchive methodsFor:'actions'! - -addFilesToArchiv:colOfFiles - - self setCommandOptions. - tarArchiver addFilesToArchiv:colOfFiles. - self synchronize. -! - -extractTo:aDirectory - - self extractTo:aDirectory with:nil. -! - -extractTo:aDirectory with:col - - self setCommandOptions. - tarArchiver extractTo:aDirectory with:col. -! - -extractWithOutDirectoryTo:aDirectory with:files - - self setCommandOptions. - tarArchiver extractWithOutDirectoryTo:aDirectory with:files. -! - -listFilesFromArchiv - - self listFilesFromArchiv:nil -! - -listFilesFromArchiv:newColOfFiles - - self setCommandOptions. - ^ tarArchiver listFilesFromArchiv:newColOfFiles. -! - -removeFilesFromArchiv:aColOfFiles - - self setCommandOptions. - tarArchiver removeFilesFromArchiv:aColOfFiles. - self synchronize. -! ! - -!Archiver::TarGZipArchive methodsFor:'actions private'! - -setCommandOptions - - tarArchiver outStream:(self outStream). - tarArchiver errorStream:(self errorStream). - tarArchiver synchron:(self synchron). -! - -synchronize - - |gzipArchiver| - - gzipArchiver := GZipArchive with:nil. - gzipArchiver zipFile:(tarArchiver fileName) to:(self fileName). -! ! - -!Archiver::TarGZipArchive methodsFor:'initialization & release'! - -release - - super release. - tarArchiver release. -! ! - -!Archiver class methodsFor:'documentation'! - -version - ^ '$Header$' -! !