module Download where import Network.URI import Network.HTTP import Network.HTTP.Base import qualified Codec.Archive.Tar as Tar ( read, unpack ) import System.FilePath import System.Directory import Codec.Compression.Zlib( decompress ) import Control.Monad baseurl :: String baseurl = "http://repos.mornfall.net/darcs/benchmark-repos/" download :: String -> IO () download repo = do let Just url = parseURI $ baseurl ++ repo ++ ".tgz" putStrLn $ "downloading and extracting: " ++ show url exist_dir <- doesDirectoryExist $ "repo" <.> repo exist_file <- doesFileExist $ "repo" <.> repo let go = do rsp' <- simpleHTTP (mkRequest GET url) rsp <- case rsp' of Left e -> fail (show e) Right x -> return x when (rspCode rsp /= (2, 0, 0)) $ fail ("download failed: " ++ rspReason rsp) createDirectory $ "repo" <.> repo bits <- getResponseBody rsp' let entries = Tar.read $ decompress bits Tar.unpack ("repo" <.> repo) entries if (exist_dir || exist_file) then putStrLn $ "repo" <.> repo ++ " already exists, skipping!" else go