mirror of
https://github.com/reanimate/reanimate.git
synced 2026-09-16 18:42:21 +00:00
Deploying to gh-pages from @ 5ec3ef8af4 🚀
This commit is contained in:
parent
8bb99c446d
commit
894c273659
47 changed files with 10037 additions and 169 deletions
118
reanimate-1.1.0.0-inplace/Reanimate.External.hs.html
Normal file
118
reanimate-1.1.0.0-inplace/Reanimate.External.hs.html
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<style type="text/css">
|
||||
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
|
||||
span.nottickedoff { background: yellow}
|
||||
span.istickedoff { background: white }
|
||||
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
|
||||
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
|
||||
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
|
||||
span.decl { font-weight: bold }
|
||||
span.spaces { background: white }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<pre>
|
||||
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
|
||||
</pre>
|
||||
<pre>
|
||||
<span class="lineno"> 1 </span>module Reanimate.External
|
||||
<span class="lineno"> 2 </span> ( URL,
|
||||
<span class="lineno"> 3 </span> SHA256,
|
||||
<span class="lineno"> 4 </span> zipArchive,
|
||||
<span class="lineno"> 5 </span> tarball,
|
||||
<span class="lineno"> 6 </span> )
|
||||
<span class="lineno"> 7 </span>where
|
||||
<span class="lineno"> 8 </span>
|
||||
<span class="lineno"> 9 </span>import Control.Monad (unless)
|
||||
<span class="lineno"> 10 </span>import Crypto.Hash.SHA256 (hash)
|
||||
<span class="lineno"> 11 </span>import qualified Data.ByteString as B (readFile)
|
||||
<span class="lineno"> 12 </span>import Data.ByteString.Base64 (encode)
|
||||
<span class="lineno"> 13 </span>import qualified Data.ByteString.Char8 as B8 (unpack)
|
||||
<span class="lineno"> 14 </span>import Reanimate.Misc (getReanimateCacheDirectory, withTempFile)
|
||||
<span class="lineno"> 15 </span>import System.Directory (doesDirectoryExist, findExecutable)
|
||||
<span class="lineno"> 16 </span>import System.FilePath ((</>))
|
||||
<span class="lineno"> 17 </span>import System.IO.Unsafe (unsafePerformIO)
|
||||
<span class="lineno"> 18 </span>import System.Process (callProcess)
|
||||
<span class="lineno"> 19 </span>
|
||||
<span class="lineno"> 20 </span>-- | Resource address
|
||||
<span class="lineno"> 21 </span>type URL = String
|
||||
<span class="lineno"> 22 </span>
|
||||
<span class="lineno"> 23 </span>-- | Resource hash
|
||||
<span class="lineno"> 24 </span>type SHA256 = String
|
||||
<span class="lineno"> 25 </span>
|
||||
<span class="lineno"> 26 </span>fetchStaticFile :: URL -> SHA256 -> (FilePath -> FilePath -> IO ()) -> IO FilePath
|
||||
<span class="lineno"> 27 </span><span class="decl"><span class="nottickedoff">fetchStaticFile url sha256 unpack = do</span>
|
||||
<span class="lineno"> 28 </span><span class="spaces"> </span><span class="nottickedoff">root <- getReanimateCacheDirectory</span>
|
||||
<span class="lineno"> 29 </span><span class="spaces"> </span><span class="nottickedoff">let folder = root </> sha256</span>
|
||||
<span class="lineno"> 30 </span><span class="spaces"> </span><span class="nottickedoff">hit <- doesDirectoryExist folder</span>
|
||||
<span class="lineno"> 31 </span><span class="spaces"> </span><span class="nottickedoff">unless hit $</span>
|
||||
<span class="lineno"> 32 </span><span class="spaces"> </span><span class="nottickedoff">downloadFile url $ \path -> do</span>
|
||||
<span class="lineno"> 33 </span><span class="spaces"> </span><span class="nottickedoff">inp <- B.readFile path</span>
|
||||
<span class="lineno"> 34 </span><span class="spaces"> </span><span class="nottickedoff">let inpSha = B8.unpack (encode (hash inp))</span>
|
||||
<span class="lineno"> 35 </span><span class="spaces"> </span><span class="nottickedoff">if inpSha == sha256</span>
|
||||
<span class="lineno"> 36 </span><span class="spaces"> </span><span class="nottickedoff">then do</span>
|
||||
<span class="lineno"> 37 </span><span class="spaces"> </span><span class="nottickedoff">unpack folder path</span>
|
||||
<span class="lineno"> 38 </span><span class="spaces"> </span><span class="nottickedoff">else</span>
|
||||
<span class="lineno"> 39 </span><span class="spaces"> </span><span class="nottickedoff">error $</span>
|
||||
<span class="lineno"> 40 </span><span class="spaces"> </span><span class="nottickedoff">"URL " ++ url ++ "\n"</span>
|
||||
<span class="lineno"> 41 </span><span class="spaces"> </span><span class="nottickedoff">++ " Expected SHA256: "</span>
|
||||
<span class="lineno"> 42 </span><span class="spaces"> </span><span class="nottickedoff">++ sha256</span>
|
||||
<span class="lineno"> 43 </span><span class="spaces"> </span><span class="nottickedoff">++ "\n"</span>
|
||||
<span class="lineno"> 44 </span><span class="spaces"> </span><span class="nottickedoff">++ " Actual SHA256: "</span>
|
||||
<span class="lineno"> 45 </span><span class="spaces"> </span><span class="nottickedoff">++ inpSha</span>
|
||||
<span class="lineno"> 46 </span><span class="spaces"> </span><span class="nottickedoff">return folder</span></span>
|
||||
<span class="lineno"> 47 </span>
|
||||
<span class="lineno"> 48 </span>{-# NOINLINE zipArchive #-}
|
||||
<span class="lineno"> 49 </span>
|
||||
<span class="lineno"> 50 </span>-- | Download and unpack zip archive. The returned path is the unpacked folder.
|
||||
<span class="lineno"> 51 </span>zipArchive :: URL -> SHA256 -> FilePath
|
||||
<span class="lineno"> 52 </span><span class="decl"><span class="nottickedoff">zipArchive url sha256 = unsafePerformIO $</span>
|
||||
<span class="lineno"> 53 </span><span class="spaces"> </span><span class="nottickedoff">fetchStaticFile url sha256 $ \folder zipfile -></span>
|
||||
<span class="lineno"> 54 </span><span class="spaces"> </span><span class="nottickedoff">callProcess "unzip" ["-qq", "-d", folder, zipfile]</span></span>
|
||||
<span class="lineno"> 55 </span>
|
||||
<span class="lineno"> 56 </span>{-# NOINLINE tarball #-}
|
||||
<span class="lineno"> 57 </span>
|
||||
<span class="lineno"> 58 </span>-- | Download and unpack tarball. The returned path is the unpacked folder.
|
||||
<span class="lineno"> 59 </span>tarball :: URL -> SHA256 -> FilePath
|
||||
<span class="lineno"> 60 </span><span class="decl"><span class="nottickedoff">tarball url sha256 = unsafePerformIO $</span>
|
||||
<span class="lineno"> 61 </span><span class="spaces"> </span><span class="nottickedoff">fetchStaticFile url sha256 $ \folder tarfile -></span>
|
||||
<span class="lineno"> 62 </span><span class="spaces"> </span><span class="nottickedoff">callProcess "tar" ["--overwrite", "--one-top-level=" ++ folder, "-xf", tarfile]</span></span>
|
||||
<span class="lineno"> 63 </span>
|
||||
<span class="lineno"> 64 </span>downloadFile :: URL -> (FilePath -> IO a) -> IO a
|
||||
<span class="lineno"> 65 </span><span class="decl"><span class="nottickedoff">downloadFile url action = do</span>
|
||||
<span class="lineno"> 66 </span><span class="spaces"> </span><span class="nottickedoff">mbCurl <- findExecutable "curl"</span>
|
||||
<span class="lineno"> 67 </span><span class="spaces"> </span><span class="nottickedoff">mbWget <- findExecutable "wget"</span>
|
||||
<span class="lineno"> 68 </span><span class="spaces"> </span><span class="nottickedoff">case (mbCurl, mbWget) of</span>
|
||||
<span class="lineno"> 69 </span><span class="spaces"> </span><span class="nottickedoff">(Just curl, _) -> downloadFileCurl curl url action</span>
|
||||
<span class="lineno"> 70 </span><span class="spaces"> </span><span class="nottickedoff">(_, Just wget) -> downloadFileWget wget url action</span>
|
||||
<span class="lineno"> 71 </span><span class="spaces"> </span><span class="nottickedoff">(Nothing, Nothing) -> error "curl/wget required to download files"</span></span>
|
||||
<span class="lineno"> 72 </span>
|
||||
<span class="lineno"> 73 </span>downloadFileCurl :: FilePath -> URL -> (FilePath -> IO a) -> IO a
|
||||
<span class="lineno"> 74 </span><span class="decl"><span class="nottickedoff">downloadFileCurl curl url action = withTempFile "dl" $ \path -> do</span>
|
||||
<span class="lineno"> 75 </span><span class="spaces"> </span><span class="nottickedoff">callProcess</span>
|
||||
<span class="lineno"> 76 </span><span class="spaces"> </span><span class="nottickedoff">curl</span>
|
||||
<span class="lineno"> 77 </span><span class="spaces"> </span><span class="nottickedoff">[ url,</span>
|
||||
<span class="lineno"> 78 </span><span class="spaces"> </span><span class="nottickedoff">"--output",</span>
|
||||
<span class="lineno"> 79 </span><span class="spaces"> </span><span class="nottickedoff">path,</span>
|
||||
<span class="lineno"> 80 </span><span class="spaces"> </span><span class="nottickedoff">"--silent",</span>
|
||||
<span class="lineno"> 81 </span><span class="spaces"> </span><span class="nottickedoff">"--show-error",</span>
|
||||
<span class="lineno"> 82 </span><span class="spaces"> </span><span class="nottickedoff">"--max-filesize",</span>
|
||||
<span class="lineno"> 83 </span><span class="spaces"> </span><span class="nottickedoff">"10M"</span>
|
||||
<span class="lineno"> 84 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
||||
<span class="lineno"> 85 </span><span class="spaces"> </span><span class="nottickedoff">action path</span></span>
|
||||
<span class="lineno"> 86 </span>
|
||||
<span class="lineno"> 87 </span>downloadFileWget :: FilePath -> URL -> (FilePath -> IO a) -> IO a
|
||||
<span class="lineno"> 88 </span><span class="decl"><span class="nottickedoff">downloadFileWget wget url action = withTempFile "dl" $ \path -> do</span>
|
||||
<span class="lineno"> 89 </span><span class="spaces"> </span><span class="nottickedoff">callProcess</span>
|
||||
<span class="lineno"> 90 </span><span class="spaces"> </span><span class="nottickedoff">wget</span>
|
||||
<span class="lineno"> 91 </span><span class="spaces"> </span><span class="nottickedoff">[ url,</span>
|
||||
<span class="lineno"> 92 </span><span class="spaces"> </span><span class="nottickedoff">"--output-document=" ++ path,</span>
|
||||
<span class="lineno"> 93 </span><span class="spaces"> </span><span class="nottickedoff">"--quiet"</span>
|
||||
<span class="lineno"> 94 </span><span class="spaces"> </span><span class="nottickedoff">]</span>
|
||||
<span class="lineno"> 95 </span><span class="spaces"> </span><span class="nottickedoff">action path</span></span>
|
||||
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in a new issue