@@ -85,7 +85,7 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
8585 -- called from the toplevel project directory.
8686 cwd <- getCurrentDirectory
8787 extrasNix <- fmap (mkNonRecSet . concat ) . forM (Map. toList extras) $ \ case
88- (_name, Just (Package v flags (Just (LocalPath folder)) False )) ->
88+ (_name, Just (Package v flags (Just (LocalPath folder)) False _ )) ->
8989 do cabalFiles <- findCabalFiles (argHpackUse args) folder
9090 forM cabalFiles $ \ cabalFile ->
9191 let pkg = cabalFilePkgName cabalFile
@@ -95,7 +95,7 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
9595 in do createDirectoryIfMissing True (takeDirectory nixFile)
9696 writeDoc nixFile . prettyNix =<< cabal2nix True (argDetailLevel args) src cabalFile
9797 return $ fromString pkg $= mkPath False nix
98- (_name, Just (Package v flags (Just (DVCS (Git url rev) subdirs)) False )) ->
98+ (_name, Just (Package v flags (Just (DVCS (Git url rev) subdirs)) False _ )) ->
9999 fmap concat . forM subdirs $ \ subdir ->
100100 do cacheHits <- liftIO $ cacheHits (argCacheFile args) url rev subdir
101101 case cacheHits of
@@ -109,11 +109,14 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
109109 return $ fromString pkg $= mkPath False nix
110110 _ -> return []
111111 let flags = concatMap (\ case
112- (name, Just (Package _v f _hasDescriptionOverride _)) -> flags2nix name f
112+ (name, Just (Package _v f _hasDescriptionOverride _ _ )) -> flags2nix name f
113113 _ -> [] ) $ Map. toList extras
114114 -- Set the `planned` option for all components in the plan.
115115 planned = map (\ name -> name <> " .planned" $=
116116 (" lib" @. " mkOverride" @@ mkInt 900 @@ mkBool True )) $ Set. toList components
117+ preExisting = concatMap (\ case
118+ (name, Just (Package _ _ _ _ True )) -> [mkStr name]
119+ _ -> [] ) $ Map. toList packages
117120
118121 return $ mkNonRecSet [
119122 " pkgs" $= (" hackage" ==> mkNonRecSet
@@ -126,7 +129,10 @@ plan2nix args Plan { packages, extras, components, compilerVersion, compilerPack
126129 ])
127130 , " extras" $= (" hackage" ==> mkNonRecSet [ " packages" $= extrasNix ])
128131 , " modules" $= mkList [
129- mkParamset [(" lib" , Nothing )] True ==> mkNonRecSet [ " packages" $= mkNonRecSet flags ]
132+ mkNonRecSet [
133+ " preExistingPkgs" $= mkList preExisting
134+ ]
135+ , mkParamset [(" lib" , Nothing )] True ==> mkNonRecSet [ " packages" $= mkNonRecSet flags ]
130136 , mkParamset [(" lib" , Nothing )] True ==> mkNonRecSet [ " packages" $= mkNonRecSet planned ]
131137 ]
132138 ]
@@ -200,6 +206,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
200206 . KeyMap. toList $ KeyMap. mapMaybe (^? _Bool) $ pkg ^. key " flags" . _Object
201207 , packageSrc = Nothing
202208 , packageHasDescriptionOverride = isJust (pkg ^? key " pkg-cabal-sha256" )
209+ , packagePreExisting = False
203210 }
204211
205212 (_, " inplace" ) -> Just $ Package
@@ -208,6 +215,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
208215 . KeyMap. toList $ KeyMap. mapMaybe (^? _Bool) $ pkg ^. key " flags" . _Object
209216 , packageSrc = Nothing
210217 , packageHasDescriptionOverride = isJust (pkg ^? key " pkg-cabal-sha256" )
218+ , packagePreExisting = False
211219 }
212220 -- Until we figure out how to force Cabal to reconfigure just about any package
213221 -- this here might be needed, so that we get the pre-existing packages as well.
@@ -220,6 +228,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
220228 , packageFlags = Map. empty
221229 , packageSrc = Nothing
222230 , packageHasDescriptionOverride = isJust (pkg ^? key " pkg-cabal-sha256" ) -- likely this is always false
231+ , packagePreExisting = True
223232 }
224233 _ -> Nothing
225234
0 commit comments