module Download where import Network.Browser import Network.URI import Network.HTTP.Base import qualified Codec.Archive.Tar as Tar ( read, unpack ) import System.FilePath import System.Directory import Codec.Compression.GZip( 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) <- browse $ do setCheckForProxy True setOutHandler (const $ return ()) request (mkRequest GET url) when (rspCode rsp /= (2, 0, 0)) $ fail ("download failed: " ++ rspReason rsp) createDirectory $ "repo" <.> repo let bits = rspBody rsp entries = Tar.read $ decompress bits Tar.unpack ("repo" <.> repo) entries if (exist_dir || exist_file) then putStrLn $ "repo" <.> repo ++ " already exists, skipping!" else go