Archiver.st
changeset 1088 f859684fd729
parent 1087 d6bfc66a3860
child 1089 128ba2ef5505
equal deleted inserted replaced
1087:d6bfc66a3860 1088:f859684fd729
     1 "{ Package: 'stx:libbasic2' }"
     1 "{ Package: 'stx:libbasic2' }"
     2 
     2 
     3 Object subclass:#Archiver
     3 Object subclass:#Archiver
     4 	instanceVariableNames:'process temporaryDirectory fileName outStream errorStream
     4         instanceVariableNames:'process temporaryDirectory fileName outStream errorStream
     5 		synchron'
     5                 synchron'
     6 	classVariableNames:''
     6         classVariableNames:''
     7 	poolDictionaries:''
     7         poolDictionaries:''
     8 	category:'System-Support-FileFormats'
     8         category:'System-Support-FileFormats'
     9 !
     9 !
    10 
    10 
    11 Archiver subclass:#GZipArchive
    11 Archiver subclass:#GZipArchive
    12 	instanceVariableNames:''
    12         instanceVariableNames:''
    13 	classVariableNames:''
    13         classVariableNames:''
    14 	poolDictionaries:''
    14         poolDictionaries:''
    15 	privateIn:Archiver
    15         privateIn:Archiver
    16 !
    16 !
    17 
    17 
    18 Archiver subclass:#TarArchive
    18 Archiver subclass:#TarArchive
    19 	instanceVariableNames:''
    19         instanceVariableNames:''
    20 	classVariableNames:''
    20         classVariableNames:''
    21 	poolDictionaries:''
    21         poolDictionaries:''
    22 	privateIn:Archiver
    22         privateIn:Archiver
    23 !
    23 !
    24 
    24 
    25 Archiver subclass:#TarGZipArchive
    25 Archiver subclass:#TarGZipArchive
    26 	instanceVariableNames:'tarArchiver tarFile'
    26         instanceVariableNames:'tarArchiver tarFile'
    27 	classVariableNames:''
    27         classVariableNames:''
    28 	poolDictionaries:''
    28         poolDictionaries:''
    29 	privateIn:Archiver
    29         privateIn:Archiver
    30 !
    30 !
    31 
    31 
    32 Archiver subclass:#ZipArchive
    32 Archiver subclass:#ZipArchive
    33 	instanceVariableNames:''
    33         instanceVariableNames:''
    34 	classVariableNames:''
    34         classVariableNames:''
    35 	poolDictionaries:''
    35         poolDictionaries:''
    36 	privateIn:Archiver
    36         privateIn:Archiver
    37 !
    37 !
    38 
    38 
    39 
    39 
    40 !Archiver class methodsFor:'instance creation'!
    40 !Archiver class methodsFor:'instance creation'!
    41 
    41 
   540     tempDir := self temporaryDirectory.
   540     tempDir := self temporaryDirectory.
   541     archivFile := self fileName.
   541     archivFile := self fileName.
   542     archivInTemp := tempDir construct:(archivFile baseName).
   542     archivInTemp := tempDir construct:(archivFile baseName).
   543     "/ copy files to be added to tempDir
   543     "/ copy files to be added to tempDir
   544     colOfFiles do:[ :file |
   544     colOfFiles do:[ :file |
   545         file recursiveCopyTo:(tempDir construct:(file baseName))
   545         file recursiveCopyTo:(tempDir construct:(file asFilename baseName))
   546     ].
   546     ].
   547 
   547 
   548     "/ copy tar archiv to tempDir
   548     "/ copy tar archiv to tempDir
   549     archivFile copyTo:archivInTemp.
   549     archivFile copyTo:archivInTemp.
   550 
   550 
   621         stream nextPutAll:self class TarArchivFileOption.
   621         stream nextPutAll:self class TarArchivFileOption.
   622         stream space.
   622         stream space.
   623         stream nextPutAll:archivFile asString.
   623         stream nextPutAll:archivFile asString.
   624         aColOfFiles do:[:el | 
   624         aColOfFiles do:[:el | 
   625             stream space.
   625             stream space.
   626             stream nextPutAll:(el baseName)
   626             stream nextPutAll:(el asFilename baseName)
   627         ].
   627         ].
   628         cmd := stream contents
   628         cmd := stream contents
   629     ].
   629     ].
   630     ^ cmd
   630     ^ cmd
   631 !
   631 !
   645     stream space.
   645     stream space.
   646     stream nextPutAll:dir asString.
   646     stream nextPutAll:dir asString.
   647     sel notNil ifTrue:[
   647     sel notNil ifTrue:[
   648         sel do:[:el | 
   648         sel do:[:el | 
   649             stream space.
   649             stream space.
   650             stream nextPutAll:(el fileName asString)
   650             stream nextPutAll:(el asString)
   651         ].
   651         ].
   652     ].
   652     ].
   653     cmd := stream contents.
   653     cmd := stream contents.
   654     stream close.
   654     stream close.
   655     ^ cmd
   655     ^ cmd
   733     file := file baseName.
   733     file := file baseName.
   734     suffix = 'tgz' ifTrue:[
   734     suffix = 'tgz' ifTrue:[
   735         file := file , '.tar'
   735         file := file , '.tar'
   736     ].
   736     ].
   737     tarFile := self temporaryDirectory construct:file.
   737     tarFile := self temporaryDirectory construct:file.
   738     tarArchiver := TarArchive with:tarFile.
   738     tarArchiver := Archiver tarArchive with:tarFile.
   739 ! !
   739 ! !
   740 
   740 
   741 !Archiver::TarGZipArchive methodsFor:'actions'!
   741 !Archiver::TarGZipArchive methodsFor:'actions'!
   742 
   742 
   743 addFilesToArchiv:colOfFiles
   743 addFilesToArchiv:colOfFiles
   822     ) 
   822     ) 
   823 ! !
   823 ! !
   824 
   824 
   825 !Archiver::ZipArchive class methodsFor:'command strings'!
   825 !Archiver::ZipArchive class methodsFor:'command strings'!
   826 
   826 
       
   827 UnzipExtDirectoryOption
       
   828     ^ $d
       
   829 !
       
   830 
       
   831 UnzipOverwriteExistingFilesOption
       
   832     ^ $o
       
   833 !
       
   834 
   827 ZipArchivCommand
   835 ZipArchivCommand
   828     ^ 'zip'
   836     ^ 'zip'
   829 !
   837 !
   830 
   838 
       
   839 ZipDeleteOption
       
   840     ^ $d
       
   841 !
       
   842 
   831 ZipHeaderOption
   843 ZipHeaderOption
   832     ^ $h
   844     ^ $h
   833 !
   845 !
   834 
   846 
   835 ZipListCommand
   847 ZipListCommand
   842 
   854 
   843 ZipRecursiveOption
   855 ZipRecursiveOption
   844     ^ $r
   856     ^ $r
   845 !
   857 !
   846 
   858 
       
   859 ZipOverwriteExistingFilesOption
       
   860     ^ $o
       
   861 !
       
   862 
   847 ZipTotalOption
   863 ZipTotalOption
   848     ^ $t
   864     ^ $t
   849 !
   865 !
   850 
   866 
   851 ZipUnzipCommand
   867 ZipUnzipCommand
   862 
   878 
   863     ^ true
   879     ^ true
   864 !
   880 !
   865 
   881 
   866 canRemoveFiles
   882 canRemoveFiles
       
   883 
       
   884     ^ true
       
   885 !
       
   886 
       
   887 hasLastLine
       
   888 
       
   889     ^ true
       
   890 !
       
   891 
       
   892 hasTitleLine
   867 
   893 
   868     ^ true
   894     ^ true
   869 ! !
   895 ! !
   870 
   896 
   871 !Archiver::ZipArchive methodsFor:'actions'!
   897 !Archiver::ZipArchive methodsFor:'actions'!
   877     tempDir := self temporaryDirectory.
   903     tempDir := self temporaryDirectory.
   878     archivFile := self fileName.
   904     archivFile := self fileName.
   879     archivInTemp := tempDir construct:(archivFile baseName).
   905     archivInTemp := tempDir construct:(archivFile baseName).
   880     "/ copy files to be added to tempDir
   906     "/ copy files to be added to tempDir
   881     colOfFiles do:[ :file |
   907     colOfFiles do:[ :file |
   882         file recursiveCopyTo:(tempDir construct:(file baseName))
   908         file recursiveCopyTo:(tempDir construct:(file asFilename baseName))
   883     ].
   909     ].
   884 
   910 
   885     "/ copy archiv to tempDir
   911     "/ copy archiv to tempDir
   886     archivFile copyTo:archivInTemp.
   912     archivFile copyTo:archivInTemp.
   887 
   913 
   888     "/ addFiles to the tar archive
   914     "/ addFiles to the tar archive
   889     cmd := self getAddFilesToArchiveCommandForArchiv:archivInTemp with:colOfFiles.
   915     cmd := self getAddFilesToArchiveCommandForArchiv:archivInTemp with:colOfFiles.
   890     self executeCommand:cmd directory:(self fileName directory).
   916     self executeCommand:cmd directory:tempDir.
   891 
   917 
   892     "/ copy tar archiv back
   918     "/ copy tar archiv back
   893     archivInTemp copyTo:(self fileName).
   919     archivInTemp copyTo:(self fileName).
   894 !
   920 !
   895 
   921 
   902 
   928 
   903     |execDir cmd|
   929     |execDir cmd|
   904 
   930 
   905     execDir := self fileName directory.
   931     execDir := self fileName directory.
   906     cmd := self getExtractSelectedFilesCommandForDirectory:aDirectory withSelection:files.
   932     cmd := self getExtractSelectedFilesCommandForDirectory:aDirectory withSelection:files.
   907     self halt.
       
   908     self executeCommand:cmd directory:execDir.
   933     self executeCommand:cmd directory:execDir.
   909 !
   934 !
   910 
   935 
   911 extractWithOutDirectoryTo:aDirectory with:files
   936 extractWithOutDirectoryTo:aDirectory with:files
   912 
   937 
   913     |execDir tempDir tempFile|
   938     |execDir tempDir tempFile targetFile|
   914 
   939 
   915     execDir := self fileName directory.
   940     execDir := self fileName directory.
   916     tempDir := self temporaryDirectory.
   941     tempDir := self temporaryDirectory.
   917     self extractTo:tempDir with:files.
   942     self extractTo:tempDir with:files.
       
   943     self halt.
   918     files do:[ : aFileString |
   944     files do:[ : aFileString |
   919         tempFile := self temporaryDirectory construct:aFileString.
   945         tempFile := self temporaryDirectory construct:aFileString.
       
   946         targetFile := aDirectory construct:(aFileString asFilename baseName).
       
   947         targetFile exists ifTrue:[
       
   948             targetFile recursiveRemove.
       
   949         ].
   920         tempFile exists ifTrue:[
   950         tempFile exists ifTrue:[
   921             tempFile recursiveCopyTo:(aDirectory construct:(aFileString fileName asFilename baseName)).
   951             tempFile recursiveCopyTo:targetFile.
   922         ].
   952         ].
   923     ].
   953     ].
   924 !
   954 !
   925 
   955 
   926 listFilesFromArchiv
   956 listFilesFromArchiv
   937     cmd := self getFileListFromArchivCommand:newColOfFiles.
   967     cmd := self getFileListFromArchivCommand:newColOfFiles.
   938     self executeCommand:cmd directory:dir 
   968     self executeCommand:cmd directory:dir 
   939 !
   969 !
   940 
   970 
   941 removeFilesFromArchiv:aColOfFiles
   971 removeFilesFromArchiv:aColOfFiles
       
   972 
       
   973     |cmd|
       
   974 
       
   975     cmd := self getRemoveFilesFromArchivFor:aColOfFiles.
       
   976     self executeCommand:cmd directory:(self fileName directory). 
   942 ! !
   977 ! !
   943 
   978 
   944 !Archiver::ZipArchive methodsFor:'command strings'!
   979 !Archiver::ZipArchive methodsFor:'command strings'!
   945 
   980 
   946 getAddFilesToArchiveCommandForArchiv:archivFile with:aColOfFiles 
   981 getAddFilesToArchiveCommandForArchiv:archivFile with:aColOfFiles 
   952         stream space.
   987         stream space.
   953         stream nextPut:self class MinusSign.
   988         stream nextPut:self class MinusSign.
   954         stream nextPut:self class ZipRecursiveOption.
   989         stream nextPut:self class ZipRecursiveOption.
   955         stream space.
   990         stream space.
   956         stream nextPutAll:archivFile asString.
   991         stream nextPutAll:archivFile asString.
       
   992         aColOfFiles do:[:el | 
       
   993             stream space.
       
   994             stream nextPutAll:(el asFilename baseName)
       
   995         ].
       
   996         cmd := stream contents
       
   997     ].
       
   998     ^ cmd
       
   999 !
       
  1000 
       
  1001 getAddFilesToTarArchiveCommand:aColOfFiles 
       
  1002     |filename cmd stream|
       
  1003 
       
  1004     filename := self fileName.
       
  1005     filename exists ifTrue:[
       
  1006         stream := WriteStream on:''.
       
  1007         stream nextPutAll:self class TarArchivCommand.
       
  1008         stream space.
       
  1009         stream nextPutAll:self class TarArchivAddOption.
       
  1010         stream nextPutAll:self class TarArchivFileOption.
       
  1011         stream space.
       
  1012         stream nextPutAll:filename asString.
   957         aColOfFiles do:[:el | 
  1013         aColOfFiles do:[:el | 
   958             stream space.
  1014             stream space.
   959             stream nextPutAll:(el baseName)
  1015             stream nextPutAll:(el baseName)
   960         ].
  1016         ].
   961         cmd := stream contents
  1017         cmd := stream contents
   987 
  1043 
   988     stream := WriteStream on:''.
  1044     stream := WriteStream on:''.
   989     stream nextPutAll:self class ZipUnzipCommand.
  1045     stream nextPutAll:self class ZipUnzipCommand.
   990     stream space.
  1046     stream space.
   991     stream nextPut:self class MinusSign.
  1047     stream nextPut:self class MinusSign.
   992     stream nextPutAll:self class ZipUnzipExtDirectoryOption.
  1048     stream nextPut:self class UnzipOverwriteExistingFilesOption.
       
  1049     stream space.
       
  1050     stream nextPut:self class MinusSign.
       
  1051     stream nextPut:self class UnzipExtDirectoryOption.
   993     stream space.
  1052     stream space.
   994     stream nextPutAll:dir asString.
  1053     stream nextPutAll:dir asString.
   995     stream space.
  1054     stream space.
   996     stream nextPutAll:self fileName asString.
  1055     stream nextPutAll:self fileName asString.
   997     sel notNil ifTrue:[
  1056     sel notNil ifTrue:[
   998         sel do:[:el | 
  1057         sel do:[:el | 
   999             stream space.
  1058             stream space.
  1000             stream nextPutAll:(el fileName asString)
  1059             stream nextPutAll:(el asString)
  1001         ].
  1060         ].
  1002     ].
  1061     ].
  1003     cmd := stream contents.
  1062     cmd := stream contents.
  1004     stream close.
  1063     stream close.
  1005     ^ cmd
  1064     ^ cmd
  1032     stream close.
  1091     stream close.
  1033     ^ cmd
  1092     ^ cmd
  1034 !
  1093 !
  1035 
  1094 
  1036 getRemoveFilesFromArchivFor:sel 
  1095 getRemoveFilesFromArchivFor:sel 
       
  1096 
       
  1097     |stream cmd|
       
  1098 
       
  1099     stream := WriteStream on:''.
       
  1100     stream nextPutAll:self class ZipArchivCommand.
       
  1101     stream space.
       
  1102     stream nextPut:self class MinusSign.
       
  1103     stream nextPut:self class ZipDeleteOption.
       
  1104     stream space.
       
  1105     stream nextPutAll:self fileName asString.
       
  1106     sel do:[:el | 
       
  1107         stream space.
       
  1108         stream nextPutAll:(el asString)
       
  1109     ].
       
  1110     cmd := stream contents.
       
  1111     stream close.
       
  1112     ^ cmd
       
  1113 !
       
  1114 
       
  1115 getRemoveFilesFromTarArchivFor:sel 
       
  1116     | stream filename|
       
  1117 
       
  1118     filename := self fileName.
       
  1119     filename exists ifTrue:[
       
  1120         stream := WriteStream on:''.
       
  1121         stream nextPutAll:self class TarArchivCommand.
       
  1122         stream space.
       
  1123         stream nextPutAll:self class TarArchivDeleteOption.
       
  1124         stream space.
       
  1125         stream nextPut:self class MinusSign.
       
  1126         stream nextPutAll:self class TarArchivFileOption.
       
  1127         stream space.
       
  1128         stream nextPutAll:filename asString.
       
  1129         sel do:[:el | 
       
  1130             stream space.
       
  1131             stream nextPutAll:el
       
  1132         ].
       
  1133         ^ stream contents
       
  1134     ]
  1037 ! !
  1135 ! !
  1038 
  1136 
  1039 !Archiver class methodsFor:'documentation'!
  1137 !Archiver class methodsFor:'documentation'!
  1040 
  1138 
  1041 version
  1139 version
  1042     ^ '$Header: /cvs/stx/stx/libbasic2/Archiver.st,v 1.3 2002-09-06 16:30:38 penk Exp $'
  1140     ^ '$Header: /cvs/stx/stx/libbasic2/Archiver.st,v 1.4 2002-09-09 13:31:11 penk Exp $'
  1043 ! !
  1141 ! !