git.iko.soy/typeable/cabal2nix
on master help sign in
Merge pull request #321 from NixOS/issue-319

Make HackageDB lazy to avoid unnecessary parsing

commit0622168c2fe8f79e9f0668b64010b5ba77ee9da5 authorPeter Simons <simons@cryp.to> dateMon 1 Jan 2018, 18:07 (9 years ago) parentc1b61fc1f675b6
2 files changed+7−7
src/Cabal2nix.hs+1−1 src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+6−6
src/Cabal2nix.hs+1−1
@@ -151,7 +151,7 @@ cabal2nixWithDB db args = do
151151 when (isJust optHackageDb) $ hPutStrLn stderr "WARN: HackageDB provided directly; ignoring --hackage-db"
152152 when (isJust optHackageSnapshot) $ hPutStrLn stderr "WARN: HackageDB provided directly; ignoring --hackage-snapshot"
153153
154− pkg <- getPackage' optHpack db $ Source optUrl (fromMaybe "" optRevision) (maybe UnknownHash Guess optSha256) (fromMaybe "" optSubpath)
154+ pkg <- getPackage' optHpack (return db) $ Source optUrl (fromMaybe "" optRevision) (maybe UnknownHash Guess optSha256) (fromMaybe "" optSubpath)
155155 processPackage opts pkg
156156
157157processPackage :: Options -> Package -> IO (Either Doc Derivation)
src/Distribution/Nixpkgs/Haskell/PackageSourceSpec.hs+6−6
@@ -43,12 +43,11 @@ getPackage :: Bool
4343 -> Source
4444 -> IO Package
4545getPackage optHpack optHackageDB optHackageSnapshot source = do
46− hackageDB <- loadHackageDB optHackageDB optHackageSnapshot
47− getPackage' optHpack hackageDB source
46+ getPackage' optHpack (loadHackageDB optHackageDB optHackageSnapshot) source
4847
4948getPackage' :: Bool
5049 -- ^ Whether hpack should regenerate the cabal file.
51− -> DB.HackageDB
50+ -> IO DB.HackageDB
5251 -> Source
5352 -> IO Package
5453getPackage' optHpack hackageDB source = do
@@ -57,7 +56,7 @@ getPackage' optHpack hackageDB source = do
5756
5857fetchOrFromDB :: Bool
5958 -- ^ Whether hpack should regenerate the cabal file
60− -> DB.HackageDB
59+ -> IO DB.HackageDB
6160 -> Source
6261 -> IO (Maybe DerivationSource, Bool, Cabal.GenericPackageDescription)
6362fetchOrFromDB optHpack hackageDB src
@@ -80,10 +79,11 @@ loadHackageDB optHackageDB optHackageSnapshot = do
8079 dbPath <- maybe DB.hackageTarball return optHackageDB
8180 DB.readTarball optHackageSnapshot dbPath
8281
83−fromDB :: DB.HackageDB
82+fromDB :: IO DB.HackageDB
8483 -> String
8584 -> IO (Maybe DerivationSource, Cabal.GenericPackageDescription)
86−fromDB hackageDB pkg = do
85+fromDB hackageDBIO pkg = do
86+ hackageDB <- hackageDBIO
8787 vd <- maybe unknownPackageError return (DB.lookup name hackageDB >>= lookupVersion)
8888 let ds = case DB.tarballSha256 vd of
8989 Nothing -> Nothing