@@ -1,5 +1,5 @@
11module Distribution.Nixpkgs.Haskell.PackageSourceSpec
2− ( Package(..), getPackage, sourceFromHackage
2+ ( Package(..), getPackage, getPackage', loadHackageDB, sourceFromHackage
33 ) where
44
55import qualified Control.Exception as Exception
@@ -43,20 +43,26 @@ getPackage :: Bool
4343 -> Source
4444 -> IO Package
4545getPackage optHpack optHackageDB optHackageSnapshot source = do
46− (derivSource, ranHpack, pkgDesc) <- fetchOrFromDB optHpack optHackageDB optHackageSnapshot source
46+ hackageDB <- loadHackageDB optHackageDB optHackageSnapshot
47+ getPackage' optHpack hackageDB source
48+
49+getPackage' :: Bool
50+ -- ^ Whether hpack should regenerate the cabal file.
51+ -> DB.HackageDB
52+ -> Source
53+ -> IO Package
54+getPackage' optHpack hackageDB source = do
55+ (derivSource, ranHpack, pkgDesc) <- fetchOrFromDB optHpack hackageDB source
4756 (\s -> Package s ranHpack pkgDesc) <$> maybe (sourceFromHackage (sourceHash source) (showPackageIdentifier pkgDesc) $ sourceCabalDir source) return derivSource
4857
4958fetchOrFromDB :: Bool
5059 -- ^ Whether hpack should regenerate the cabal file
51− -> Maybe FilePath
52− -- ^ The path to the Hackage database.
53− -> Maybe UTCTime
54− -- ^ If we have hackage-snapshot time.
60+ -> DB.HackageDB
5561 -> Source
5662 -> IO (Maybe DerivationSource, Bool, Cabal.GenericPackageDescription)
57−fetchOrFromDB optHpack optHackageDB optHackageSnapshot src
63+fetchOrFromDB optHpack hackageDB src
5864 | "cabal://" `isPrefixOf` sourceUrl src = do
59− (msrc, pkgDesc) <- fromDB optHackageDB optHackageSnapshot . drop (length "cabal://") $ sourceUrl src
65+ (msrc, pkgDesc) <- fromDB hackageDB . drop (length "cabal://") $ sourceUrl src
6066 return (msrc, False, pkgDesc)
6167 | otherwise = do
6268 r <- fetch (\dir -> cabalFromPath optHpack (dir </> sourceCabalDir src)) src
@@ -65,14 +71,20 @@ fetchOrFromDB optHpack optHackageDB optHackageSnapshot src
6571 Just (derivSource, (externalSource, ranHpack, pkgDesc)) -> do
6672 return (derivSource <$ guard externalSource, ranHpack, pkgDesc)
6773
68−fromDB :: Maybe FilePath
69− -> Maybe UTCTime
74+loadHackageDB :: Maybe FilePath
75+ -- ^ The path to the Hackage database.
76+ -> Maybe UTCTime
77+ -- ^ If we have hackage-snapshot time.
78+ -> IO DB.HackageDB
79+loadHackageDB optHackageDB optHackageSnapshot = do
80+ dbPath <- maybe DB.hackageTarball return optHackageDB
81+ DB.readTarball optHackageSnapshot dbPath
82+
83+fromDB :: DB.HackageDB
7084 -> String
7185 -> IO (Maybe DerivationSource, Cabal.GenericPackageDescription)
72−fromDB optHackageDB optHackageSnapshot pkg = do
73− dbPath <- maybe DB.hackageTarball return optHackageDB
74− db <- DB.readTarball optHackageSnapshot dbPath
75− vd <- maybe unknownPackageError return (DB.lookup name db >>= lookupVersion)
86+fromDB hackageDB pkg = do
87+ vd <- maybe unknownPackageError return (DB.lookup name hackageDB >>= lookupVersion)
7688 let ds = case DB.tarballSha256 vd of
7789 Nothing -> Nothing
7890 Just hash -> Just (DerivationSource "url" url "" hash)