git.iko.soy/typeable/stackage2nix
on master help sign in
Add fallback load package from Hackage Db
commit52f3b66ec5702c501a1a8b3e36dc40c459d42678 authorDmitry Bushev <bushevdv@gmail.com> dateMon 21 Aug 2017, 20:02 (9 years ago) parent064625a
2 files changed+26−6
src/LtsHaskell.hs+25−6 stackage2nix.cabal+1
src/LtsHaskell.hs+25−6
@@ -2,14 +2,17 @@ module LtsHaskell where
22
33import AllCabalHashes
44import Control.Lens
5+import Control.Monad.Catch
56import Data.Maybe
6−import Distribution.Text (display)
7+import Data.Text as T
8+import Distribution.Text as Text (display)
79import Control.Monad
810import Distribution.Compiler (CompilerInfo(..), AbiTag(NoAbiTag), CompilerId(..), CompilerFlavor(GHC))
911import Distribution.System (Platform(..))
1012import Distribution.Package (PackageName, PackageIdentifier(..), Dependency(..))
11−import Distribution.Nixpkgs.Haskell.PackageSourceSpec
13+import Distribution.Nixpkgs.Haskell.PackageSourceSpec as PackageSourceSpec
1214import Distribution.Nixpkgs.Haskell.FromStack
15+import Distribution.Nixpkgs.Haskell.Stack
1316import Distribution.Nixpkgs.Fetch
1417import Distribution.Nixpkgs.PackageMap (readNixpkgPackageMap, resolve)
1518import Distribution.Version (Version, withinRange)
@@ -30,10 +33,12 @@ loadBuildPlan = Yaml.decodeFileEither >=> \case
3033 Left err -> fail $ "Failed to parse stackage build plan: " ++ show err
3134 Right bp -> return bp
3235
33−loadPackage :: FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
34−loadPackage allCabalHashesPath mSha1Hash pkgId = do
36+getPackageFromRepo :: FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
37+getPackageFromRepo allCabalHashesPath mSha1Hash pkgId = do
3538 (pkgDesc, _) <- case mSha1Hash of
36− Just sha1 -> readPackageByHash allCabalHashesPath sha1
39+ Just sha1 ->
40+ readPackageByHash allCabalHashesPath sha1
41+ `catchAll` const (readPackageByName allCabalHashesPath pkgId)
3742 Nothing -> readPackageByName allCabalHashesPath pkgId
3843 meta <- readPackageMeta allCabalHashesPath pkgId
3944 let
@@ -43,6 +48,16 @@ loadPackage allCabalHashesPath mSha1Hash pkgId = do
4348 source = DerivationSource "url" ("mirror://hackage/" ++ display pkgId ++ ".tar.gz") "" tarballSHA256
4449 return $ Package source pkgDesc
4550
51+getPackageFromDb :: PackageIdentifier -> IO Package
52+getPackageFromDb pkgId =
53+ getStackPackageFromDb Nothing
54+ $ StackPackage (HackagePackage (T.pack $ Text.display pkgId)) True
55+
56+loadPackage :: FilePath -> Maybe SHA1Hash -> PackageIdentifier -> IO Package
57+loadPackage allCabalHashesPath mSha1Hash pkgId =
58+ getPackageFromRepo allCabalHashesPath mSha1Hash pkgId
59+ `catchIOError` const (getPackageFromDb pkgId)
60+
4661ghcCompilerInfo :: Version -> CompilerInfo
4762ghcCompilerInfo v = CompilerInfo
4863 { compilerInfoId = CompilerId GHC v
@@ -56,7 +71,11 @@ buildPlanContainsDependency :: Map.Map PackageName Version -> Dependency -> Bool
5671buildPlanContainsDependency packageVersions (Dependency depName versionRange) =
5772 maybe False (`withinRange` versionRange) $ Map.lookup depName packageVersions
5873
59−buildPackageSetConfig :: FilePath -> FilePath -> BuildPlan -> IO PackageSetConfig
74+buildPackageSetConfig
75+ :: FilePath
76+ -> FilePath
77+ -> BuildPlan
78+ -> IO PackageSetConfig
6079buildPackageSetConfig optAllCabalHashes optNixpkgsRepository buildPlan = do
6180 nixpkgs <- readNixpkgPackageMap optNixpkgsRepository Nothing
6281 let
stackage2nix.cabal+1
@@ -38,6 +38,7 @@ library
3838 , containers
3939 , deepseq
4040 , distribution-nixpkgs >= 1.1
41+ , exceptions > 0.8
4142 , filepath
4243 , gitlib > 3
4344 , gitlib-libgit2 > 3