mirror of
https://github.com/digital-asset/daml.git
synced 2024-09-20 09:17:43 +03:00
Support empty packages in daml build (#3624)
We still error out if the directory in `src` doesn’t exist to catch typos.
This commit is contained in:
parent
0f0a12db22
commit
770a9ae5e4
@ -15,6 +15,7 @@ module DA.Daml.Compiler.Dar
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import qualified "zip" Codec.Archive.Zip as Zip
|
import qualified "zip" Codec.Archive.Zip as Zip
|
||||||
|
import Control.Exception (assert)
|
||||||
import Control.Monad.Extra
|
import Control.Monad.Extra
|
||||||
import Control.Monad.IO.Class
|
import Control.Monad.IO.Class
|
||||||
import Control.Monad.Trans.Class
|
import Control.Monad.Trans.Class
|
||||||
@ -117,8 +118,9 @@ buildDar service pkgConf@PackageConfigFields {..} ifDir dalfInput = do
|
|||||||
runMaybeT $ do
|
runMaybeT $ do
|
||||||
files <- getDamlFiles pSrc
|
files <- getDamlFiles pSrc
|
||||||
opts <- lift getIdeOptions
|
opts <- lift getIdeOptions
|
||||||
|
lfVersion <- lift getDamlLfVersion
|
||||||
pkg <- case optShakeFiles opts of
|
pkg <- case optShakeFiles opts of
|
||||||
Nothing -> mergePkgs <$> usesE GeneratePackage files
|
Nothing -> mergePkgs lfVersion <$> usesE GeneratePackage files
|
||||||
Just _ -> generateSerializedPackage pName files
|
Just _ -> generateSerializedPackage pName files
|
||||||
let pkgModuleNames = map T.unpack $ LF.packageModuleNames pkg
|
let pkgModuleNames = map T.unpack $ LF.packageModuleNames pkg
|
||||||
let missingExposed =
|
let missingExposed =
|
||||||
@ -204,16 +206,15 @@ getSrcRoot fileOrDir = do
|
|||||||
pure $ toNormalizedFilePath root
|
pure $ toNormalizedFilePath root
|
||||||
|
|
||||||
-- | Merge several packages into one.
|
-- | Merge several packages into one.
|
||||||
mergePkgs :: [WhnfPackage] -> LF.Package
|
mergePkgs :: LF.Version -> [WhnfPackage] -> LF.Package
|
||||||
mergePkgs [] = error "No package build when building dar"
|
mergePkgs ver pkgs =
|
||||||
mergePkgs (WhnfPackage pkg0:pkgs) =
|
foldl'
|
||||||
foldl
|
(\pkg1 (WhnfPackage pkg2) -> assert (LF.packageLfVersion pkg1 == ver) $
|
||||||
(\pkg1 (WhnfPackage pkg2) ->
|
|
||||||
LF.Package
|
LF.Package
|
||||||
{ LF.packageLfVersion = LF.packageLfVersion pkg2
|
{ LF.packageLfVersion = ver
|
||||||
, LF.packageModules = LF.packageModules pkg1 `NM.union` LF.packageModules pkg2
|
, LF.packageModules = LF.packageModules pkg1 `NM.union` LF.packageModules pkg2
|
||||||
})
|
})
|
||||||
pkg0
|
LF.Package { LF.packageLfVersion = ver, LF.packageModules = NM.empty }
|
||||||
pkgs
|
pkgs
|
||||||
|
|
||||||
-- | Find all DAML files below a given source root. If the source root is a file we interpret it as
|
-- | Find all DAML files below a given source root. If the source root is a file we interpret it as
|
||||||
|
@ -295,6 +295,17 @@ tests damlc = testGroup "Packaging"
|
|||||||
, "dependencies: [daml-prim, daml-stdlib]"
|
, "dependencies: [daml-prim, daml-stdlib]"
|
||||||
]
|
]
|
||||||
buildProject projDir
|
buildProject projDir
|
||||||
|
|
||||||
|
, testCase "Empty package" $ withTempDir $ \projDir -> do
|
||||||
|
writeFileUTF8 (projDir </> "daml.yaml") $ unlines
|
||||||
|
[ "sdk-version: " <> sdkVersion
|
||||||
|
, "name: proj"
|
||||||
|
, "version: 0.0.1"
|
||||||
|
, "source: src"
|
||||||
|
, "dependencies: [daml-prim, daml-stdlib]"
|
||||||
|
]
|
||||||
|
createDirectoryIfMissing True (projDir </> "src")
|
||||||
|
buildProject projDir
|
||||||
, dataDependencyTests damlc
|
, dataDependencyTests damlc
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
|
Loading…
Reference in New Issue
Block a user