From 9f40e1957b79c7a92b86ed5d7aee3d6d33408b9a Mon Sep 17 00:00:00 2001 From: Zhenya Vinogradov Date: Fri, 24 Apr 2020 14:44:54 +0300 Subject: [PATCH] Include cabal-version field into cabal files generated with hpack hpack includes this field itself when it's called from the command line. Without this field cabal may fail to parse generated cabal files --- cabal2nix/Main.hs | 13 ++++++++++--- lib/Stack2nix/Project.hs | 14 +++++++++++--- plan2nix/Plan2Nix/Project.hs | 13 ++++++++++--- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/cabal2nix/Main.hs b/cabal2nix/Main.hs index 0f09e41..b7234b2 100644 --- a/cabal2nix/Main.hs +++ b/cabal2nix/Main.hs @@ -92,10 +92,17 @@ findCabalFiles path = doesFileExist (path Hpack.packageConfig) >>= \case Right r -> return $ [InMemory (Just Hpack) (Hpack.decodeResultCabalFile r) - (encodeUtf8 $ Hpack.renderPackage [] (Hpack.decodeResultPackage r))] + (encodeUtf8 $ render r)] - where encodeUtf8 :: String -> ByteString - encodeUtf8 = T.encodeUtf8 . T.pack + where + render :: Hpack.DecodeResult -> String + render r = + let body = Hpack.renderPackage [] (Hpack.decodeResultPackage r) + cabalVersion = Hpack.decodeResultCabalVersion r + in cabalVersion ++ body + + encodeUtf8 :: String -> ByteString + encodeUtf8 = T.encodeUtf8 . T.pack expr :: FilePath -> String -> String -> IO (Binding NExpr) diff --git a/lib/Stack2nix/Project.hs b/lib/Stack2nix/Project.hs index c0f65f7..ace8823 100644 --- a/lib/Stack2nix/Project.hs +++ b/lib/Stack2nix/Project.hs @@ -30,10 +30,18 @@ findCabalFiles UsePackageYamlFirst path = doesFileExist (path Hpack.packageC Right r -> return $ [InMemory (Just Hpack) (Hpack.decodeResultCabalFile r) - (encodeUtf8 $ Hpack.renderPackage [] (Hpack.decodeResultPackage r))] + (encodeUtf8 $ render r)] + + where + render :: Hpack.DecodeResult -> String + render r = + let body = Hpack.renderPackage [] (Hpack.decodeResultPackage r) + cabalVersion = Hpack.decodeResultCabalVersion r + in cabalVersion ++ body + + encodeUtf8 :: String -> ByteString + encodeUtf8 = T.encodeUtf8 . T.pack - where encodeUtf8 :: String -> ByteString - encodeUtf8 = T.encodeUtf8 . T.pack findOnlyCabalFiles :: FilePath -> IO [CabalFile] findOnlyCabalFiles path = fmap (OnDisk . (path )) . filter (isSuffixOf ".cabal") <$> listDirectory path diff --git a/plan2nix/Plan2Nix/Project.hs b/plan2nix/Plan2Nix/Project.hs index 0ea337e..fbfe041 100644 --- a/plan2nix/Plan2Nix/Project.hs +++ b/plan2nix/Plan2Nix/Project.hs @@ -28,7 +28,14 @@ findCabalFiles path = doesFileExist (path Hpack.packageConfig) >>= \case Right r -> return $ [InMemory (Just Hpack) (Hpack.decodeResultCabalFile r) - (encodeUtf8 $ Hpack.renderPackage [] (Hpack.decodeResultPackage r))] + (encodeUtf8 $ render r)] - where encodeUtf8 :: String -> ByteString - encodeUtf8 = T.encodeUtf8 . T.pack + where + render :: Hpack.DecodeResult -> String + render r = + let body = Hpack.renderPackage [] (Hpack.decodeResultPackage r) + cabalVersion = Hpack.decodeResultCabalVersion r + in cabalVersion ++ body + + encodeUtf8 :: String -> ByteString + encodeUtf8 = T.encodeUtf8 . T.pack