Archiver.st
changeset 4103 d2f19ff163dc
parent 3794 7521fb1589fd
child 4219 7ecd6ba2b202
--- 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