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