--- a/Archiver.st Wed Oct 05 19:22:33 2016 +0200
+++ b/Archiver.st Mon Oct 10 09:31:27 2016 +0200
@@ -91,6 +91,13 @@
privateIn:Archiver
!
+Archiver::MultiFileArchive subclass:#XarArchive
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:Archiver
+!
+
Archiver::MultiFileArchive subclass:#ZipArchive
instanceVariableNames:''
classVariableNames:''
@@ -140,6 +147,7 @@
'application/x-squeak-archive' ZipArchive
'application/x-squeak-monticello-archive' ZipArchive
'application/java-archive' ZipArchive
+ 'application/x-xar' XarArchive "/ on OSX
'application/x-ar-archive' ArArchive
'application/x-ar-library' ArArchive
@@ -1233,6 +1241,83 @@
gzipArchiver compressFile:(tarArchiver fileName) to:(self fileName).
! !
+!Archiver::XarArchive class methodsFor:'command strings'!
+
+xarCommand
+ ^ 'xar'
+! !
+
+!Archiver::XarArchive class methodsFor:'queries'!
+
+canAddFiles
+
+ ^ false
+!
+
+canRemoveFiles
+
+ ^ false
+!
+
+canViewFile
+
+ ^ true
+! !
+
+!Archiver::XarArchive methodsFor:'columns'!
+
+columns
+
+ "/ colums id/readSelector words to read
+ ^ #(
+ #(#fileName #rest)
+ )
+!
+
+isValidOutputLine:line
+ ^ true
+! !
+
+!Archiver::XarArchive methodsFor:'command strings'!
+
+getCommandToExtractFiles:sel intoDirectory:dir
+ |stream|
+
+ stream := WriteStream on:''.
+
+ "/ '-x' TarArchivUnpackOption
+ "/ '-f' TarArchivFileOption
+ "/ '-C' TarArchivUnpackInDirectoryOption
+ stream nextPutAll:('%1 -x -C %3 -f "%2"'
+ bindWith:self class xarCommand
+ with:self fileName asString string
+ with:dir asString).
+
+ sel notNil ifTrue:[
+ sel do:[:el |
+ stream nextPutAll:' "'.
+ stream nextPutAll:(el asString).
+ stream nextPutAll:'"'
+ ].
+ ].
+ ^ stream contents.
+!
+
+getCommandToListFiles:aColOfFiles
+ |stream|
+
+ stream := WriteStream on:''.
+
+ "/ '-t' TarArchivListContentsOption
+ "/ '-f' TarArchivFileOption
+ stream nextPutAll:('%1 -t -f "%2"'
+ bindWith:self class xarCommand
+ with:self fileName baseName).
+
+ stream nextPutAll:(self class stringWithQuotedFileBaseNames:aColOfFiles).
+ ^ stream contents.
+! !
+
!Archiver::ZipArchive class methodsFor:'command strings'!
unzipCommand