27 lines
782 B
Haskell
27 lines
782 B
Haskell
|
import System.Environment
|
||
|
import System.Directory
|
||
|
import Codec.Archive.Zip
|
||
|
import qualified Data.ByteString.Lazy as BS
|
||
|
import qualified Control.Exception as E
|
||
|
import System.IO.Error (isDoesNotExistError)
|
||
|
|
||
|
mkzip :: String -> IO ()
|
||
|
mkzip fmt = do
|
||
|
let dir = "data/"++fmt
|
||
|
output = "data/reference."++fmt
|
||
|
cd <- getCurrentDirectory
|
||
|
setCurrentDirectory dir
|
||
|
archive <- addFilesToArchive [OptRecursive] emptyArchive ["."]
|
||
|
setCurrentDirectory cd
|
||
|
removeIfExists output
|
||
|
BS.writeFile output $ fromArchive archive
|
||
|
|
||
|
removeIfExists :: FilePath -> IO ()
|
||
|
removeIfExists fileName = removeFile fileName `E.catch` handleExists
|
||
|
where handleExists e
|
||
|
| isDoesNotExistError e = return ()
|
||
|
| otherwise = E.throwIO e
|
||
|
|
||
|
main :: IO ()
|
||
|
main = getArgs >>= mkzip . (!!0)
|