mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-16 14:18:29 +01:00
Write cabal files next to .txt files for Hoogle #214
This commit is contained in:
parent
dd02c4d845
commit
4da05012e5
@ -32,9 +32,12 @@ import qualified Data.Conduit.Binary as CB
|
|||||||
import Data.Conduit.Zlib (WindowBits (WindowBits),
|
import Data.Conduit.Zlib (WindowBits (WindowBits),
|
||||||
compress, ungzip)
|
compress, ungzip)
|
||||||
import qualified Hoogle
|
import qualified Hoogle
|
||||||
import System.Directory (doesFileExist)
|
import System.Directory (doesFileExist, getAppUserDataDirectory)
|
||||||
|
import System.IO (withBinaryFile, IOMode (ReadMode))
|
||||||
import System.IO.Temp (withSystemTempDirectory)
|
import System.IO.Temp (withSystemTempDirectory)
|
||||||
import Control.SingleRun
|
import Control.SingleRun
|
||||||
|
import qualified Data.ByteString.Lazy as L
|
||||||
|
import System.FilePath (splitPath)
|
||||||
|
|
||||||
filename' :: Text
|
filename' :: Text
|
||||||
filename' = concat
|
filename' = concat
|
||||||
@ -230,9 +233,28 @@ createHoogleDB db man name = handleAny (\e -> print e $> Nothing) $ do
|
|||||||
createTree (fromString bindir)
|
createTree (fromString bindir)
|
||||||
|
|
||||||
withSystemTempDirectory ("hoogle-" ++ unpack (toPathPiece name)) $ \tmpdir -> do
|
withSystemTempDirectory ("hoogle-" ++ unpack (toPathPiece name)) $ \tmpdir -> do
|
||||||
runResourceT
|
allPackagePairs <- runResourceT
|
||||||
$ sourceTarFile False tarFP
|
$ sourceTarFile False tarFP
|
||||||
$$ mapM_C (liftIO . singleDB db name tmpdir)
|
$$ foldMapMC (liftIO . singleDB db name tmpdir)
|
||||||
|
|
||||||
|
stackDir <- getAppUserDataDirectory "stack"
|
||||||
|
let indexTar = stackDir </> "indices" </> "Hackage" </> "00-index.tar"
|
||||||
|
withBinaryFile indexTar ReadMode $ \h -> do
|
||||||
|
let loop Tar.Done = return ()
|
||||||
|
loop (Tar.Fail e) = throwM e
|
||||||
|
loop (Tar.Next e es) = go e >> loop es
|
||||||
|
|
||||||
|
go e =
|
||||||
|
case (Tar.entryContent e, splitPath $ Tar.entryPath e) of
|
||||||
|
(Tar.NormalFile cabalLBS _, [pkg', ver', pkgcabal'])
|
||||||
|
| Just pkg <- stripSuffix "/" (pack pkg')
|
||||||
|
, Just ver <- stripSuffix "/" (pack ver')
|
||||||
|
, Just pkg2 <- stripSuffix ".cabal" (pack pkgcabal')
|
||||||
|
, pkg == pkg2
|
||||||
|
, lookup pkg allPackagePairs == Just ver ->
|
||||||
|
writeFile (tmpdir </> unpack pkg <.> "cabal") cabalLBS
|
||||||
|
_ -> return ()
|
||||||
|
L.hGetContents h >>= loop . Tar.read
|
||||||
|
|
||||||
let args =
|
let args =
|
||||||
[ "generate"
|
[ "generate"
|
||||||
@ -262,7 +284,7 @@ singleDB :: StackageDatabase
|
|||||||
-> SnapName
|
-> SnapName
|
||||||
-> FilePath -- ^ temp directory to write .txt files to
|
-> FilePath -- ^ temp directory to write .txt files to
|
||||||
-> Tar.Entry
|
-> Tar.Entry
|
||||||
-> IO ()
|
-> IO (Map Text Text)
|
||||||
singleDB db sname tmpdir e@(Tar.entryContent -> Tar.NormalFile lbs _) = do
|
singleDB db sname tmpdir e@(Tar.entryContent -> Tar.NormalFile lbs _) = do
|
||||||
--putStrLn $ "Loading file for Hoogle: " ++ pack (Tar.entryPath e)
|
--putStrLn $ "Loading file for Hoogle: " ++ pack (Tar.entryPath e)
|
||||||
|
|
||||||
@ -271,11 +293,14 @@ singleDB db sname tmpdir e@(Tar.entryContent -> Tar.NormalFile lbs _) = do
|
|||||||
Just (Entity sid _) <- lookupSnapshot sname
|
Just (Entity sid _) <- lookupSnapshot sname
|
||||||
lookupSnapshotPackage sid pkg
|
lookupSnapshotPackage sid pkg
|
||||||
case msp of
|
case msp of
|
||||||
Nothing -> putStrLn $ "Unknown: " ++ pkg
|
Nothing -> do
|
||||||
Just _ -> do
|
putStrLn $ "Unknown: " ++ pkg
|
||||||
|
return mempty
|
||||||
|
Just (Entity _ sp) -> do
|
||||||
let out = tmpdir </> unpack pkg <.> "txt"
|
let out = tmpdir </> unpack pkg <.> "txt"
|
||||||
-- FIXME add @url directive
|
-- FIXME add @url directive
|
||||||
writeFile out lbs
|
writeFile out lbs
|
||||||
|
return $ singletonMap pkg (snapshotPackageVersion sp)
|
||||||
{-
|
{-
|
||||||
docsUrl = concat
|
docsUrl = concat
|
||||||
[ "https://www.stackage.org/haddock/"
|
[ "https://www.stackage.org/haddock/"
|
||||||
@ -285,4 +310,4 @@ singleDB db sname tmpdir e@(Tar.entryContent -> Tar.NormalFile lbs _) = do
|
|||||||
, "/index.html"
|
, "/index.html"
|
||||||
] -}
|
] -}
|
||||||
|
|
||||||
singleDB _ _ _ _ = return ()
|
singleDB _ _ _ _ = return mempty
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user