--- a/Archiver.st Fri Nov 25 16:45:58 2016 +0100
+++ b/Archiver.st Mon Nov 28 12:40:40 2016 +0100
@@ -1404,7 +1404,7 @@
!
isValidOutputLine:line
- ('[-d][-r][-w][-x]' match:(line copyTo:4)) ifTrue:[^ true].
+ ('[-d][-r][-w][-x]' match:(line copyToMax:4)) ifTrue:[^ true].
^ false.
! !
@@ -1473,22 +1473,31 @@
template := '"%1" -Z -m -h "%2"'
].
OperatingSystem isMSDOSlike ifTrue:[
- (cmd asFilename baseName sameAs: 'WinRAR.exe') ifTrue:[
- headlessCmd := cmd asFilename directory construct:'rar.exe'.
- headlessCmd exists ifTrue:[
- cmd := headlessCmd.
- template := '"%1" l "%2"'
+ |mapping cmdBasename|
+
+ mapping := #('winrar.exe' 'rar.exe' '"%1" l "%2"'
+"/ does not work yet:
+"/ '7zFM.exe' '7z.exe' '"%1" l "%2"'
+ ).
+ cmdBasename := cmd asFilename baseName.
+ mapping inGroupsOf:3 do:[:originalBasename :mappedBasename :templ|
+ (cmdBasename sameAs:originalBasename) ifTrue:[
+ headlessCmd := cmd asFilename directory construct:mappedBasename.
+ headlessCmd isExecutableProgram ifTrue:[
+ cmd := headlessCmd pathName.
+ template := templ.
+ ].
].
- ] ifFalse:[
- self halt:'unhandled unzip command'.
- ]
+ ].
+ template isNil ifTrue:[
+ self halt:'unknown command'
+ ].
].
template notNil ifTrue:[
^ String streamContents:[:s |
s nextPutAll:(template
- bindWith:cmd
- with:self fileName asString string).
+ bindWith:cmd with:self fileName asString string).
aColOfFiles notNil ifTrue:[
self breakPoint:#ca.