|
5 | 5 |
|
6 | 6 | module DA.Cli.Damlc.Packaging
|
7 | 7 | ( createProjectPackageDb
|
| 8 | + , setupPackageDb |
| 9 | + , setupPackageDbFromPackageConfig |
8 | 10 | , mbErr
|
9 | 11 | , getUnitId
|
10 | 12 |
|
@@ -43,27 +45,35 @@ import qualified Module as GHC
|
43 | 45 | import qualified "ghc-lib-parser" Packages as GHC
|
44 | 46 | import System.Directory.Extra (copyFile, createDirectoryIfMissing, listFilesRecursive, removePathForcibly)
|
45 | 47 | import System.Exit
|
| 48 | +import System.FileLock |
46 | 49 | import System.FilePath
|
47 | 50 | import System.IO.Extra (hFlush, hPutStrLn, stderr, writeFileUTF8)
|
48 | 51 | import System.Info.Extra
|
49 | 52 | import System.Process (callProcess)
|
50 | 53 | import "ghc-lib-parser" UniqSet
|
51 | 54 |
|
52 | 55 | import DA.Bazel.Runfiles
|
| 56 | +import DA.Cli.Damlc.DependencyDb |
| 57 | +import DA.Daml.Assistant.Env (getDamlEnv, getDamlPath, envUseCache) |
| 58 | +import DA.Daml.Assistant.Types (LookForProjectPath (..)) |
| 59 | +import DA.Daml.Assistant.Util (wrapErr) |
| 60 | +import DA.Daml.Assistant.Version (resolveReleaseVersionUnsafe) |
53 | 61 | import DA.Daml.Compiler.Dar
|
54 | 62 | import DA.Daml.Compiler.DataDependencies as DataDeps
|
55 | 63 | import DA.Daml.Compiler.DecodeDar (DecodedDalf(..), decodeDalf)
|
56 | 64 | import DA.Daml.Compiler.Output
|
57 |
| -import qualified DA.Daml.LF.Ast as LF |
58 | 65 | import DA.Daml.LF.Ast.Optics (packageRefs)
|
59 |
| -import qualified DA.Daml.LFConversion.MetadataEncoding as LFC |
60 | 66 | import DA.Daml.Options.Packaging.Metadata
|
61 | 67 | import DA.Daml.Options.Types
|
62 |
| -import DA.Cli.Damlc.DependencyDb |
63 |
| -import qualified DA.Pretty |
64 |
| -import qualified DA.Service.Logger as Logger |
| 68 | +import DA.Daml.Package.Config (PackageConfigFields (..)) |
| 69 | +import DA.Daml.Project.Consts (damlAssistantIsSet) |
| 70 | +import DA.Daml.Project.Types (ReleaseVersion, unsafeResolveReleaseVersion) |
65 | 71 | import Development.IDE.Core.IdeState.Daml
|
66 | 72 | import Development.IDE.Core.RuleTypes.Daml
|
| 73 | +import qualified DA.Daml.LF.Ast as LF |
| 74 | +import qualified DA.Daml.LFConversion.MetadataEncoding as LFC |
| 75 | +import qualified DA.Pretty |
| 76 | +import qualified DA.Service.Logger as Logger |
67 | 77 | import SdkVersion.Class (SdkVersioned, damlStdlib)
|
68 | 78 |
|
69 | 79 | -- | Create the project package database containing the given dar packages.
|
@@ -945,3 +955,58 @@ prefixModules prefixes dalfs = do
|
945 | 955 | ( prefix
|
946 | 956 | , NM.names . LF.packageModules . LF.extPackagePkg $ LF.dalfPackagePkg pkg
|
947 | 957 | )
|
| 958 | + |
| 959 | +unsafeSetupPackageDb |
| 960 | + :: SdkVersioned |
| 961 | + => NormalizedFilePath |
| 962 | + -> Options |
| 963 | + -> ReleaseVersion |
| 964 | + -> [String] -- Package dependencies. Can be base-packages, sdk-packages or filepath. |
| 965 | + -> [FilePath] -- Data Dependencies. Can be filepath to dars/dalfs. |
| 966 | + -> MS.Map UnitId GHC.ModuleName |
| 967 | + -> IO () |
| 968 | +unsafeSetupPackageDb projRoot opts releaseVersion pDependencies pDataDependencies pModulePrefixes = do |
| 969 | + installDependencies |
| 970 | + projRoot |
| 971 | + opts |
| 972 | + releaseVersion |
| 973 | + pDependencies |
| 974 | + pDataDependencies |
| 975 | + createProjectPackageDb projRoot opts pModulePrefixes |
| 976 | + |
| 977 | +withPkgDbLock :: NormalizedFilePath -> IO a -> IO a |
| 978 | +withPkgDbLock projRoot act = do |
| 979 | + let packageDbLockFile = packageDbLockPath projRoot |
| 980 | + createDirectoryIfMissing True $ takeDirectory packageDbLockFile |
| 981 | + withFileLock packageDbLockFile Exclusive $ const act |
| 982 | + |
| 983 | +-- Installs dependencies and creates package Db ready to be used |
| 984 | +setupPackageDb |
| 985 | + :: SdkVersioned |
| 986 | + => NormalizedFilePath |
| 987 | + -> Options |
| 988 | + -> ReleaseVersion |
| 989 | + -> [String] -- Package dependencies. Can be base-packages, sdk-packages or filepath. |
| 990 | + -> [FilePath] -- Data Dependencies. Can be filepath to dars/dalfs. |
| 991 | + -> MS.Map UnitId GHC.ModuleName |
| 992 | + -> IO () |
| 993 | +setupPackageDb projRoot opts releaseVersion pDependencies pDataDependencies pModulePrefixes = |
| 994 | + withPkgDbLock projRoot $ unsafeSetupPackageDb projRoot opts releaseVersion pDependencies pDataDependencies pModulePrefixes |
| 995 | + |
| 996 | +setupPackageDbFromPackageConfig |
| 997 | + :: SdkVersioned |
| 998 | + => NormalizedFilePath |
| 999 | + -> Options |
| 1000 | + -> PackageConfigFields |
| 1001 | + -> IO () |
| 1002 | +setupPackageDbFromPackageConfig projRoot opts PackageConfigFields {..} = |
| 1003 | + withPkgDbLock projRoot $ do |
| 1004 | + damlAssistantIsSet <- damlAssistantIsSet |
| 1005 | + releaseVersion <- if damlAssistantIsSet |
| 1006 | + then do |
| 1007 | + damlPath <- getDamlPath |
| 1008 | + damlEnv <- getDamlEnv damlPath (LookForProjectPath False) |
| 1009 | + wrapErr "installing dependencies and initializing package database" $ |
| 1010 | + resolveReleaseVersionUnsafe (envUseCache damlEnv) pSdkVersion |
| 1011 | + else pure (unsafeResolveReleaseVersion pSdkVersion) |
| 1012 | + unsafeSetupPackageDb projRoot opts releaseVersion pDependencies pDataDependencies pModulePrefixes |
0 commit comments