Skip to content

Commit 0a6a049

Browse files
committed
Build nonReinstallablePkgs from pre-existing packages in plan.json
1 parent 200be01 commit 0a6a049

File tree

3 files changed

+52
-24
lines changed

3 files changed

+52
-24
lines changed

nix-tools/flake.lock

+38-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nix-tools/nix-tools/plan2nix/Plan2Nix.hs

+13-4
Original file line numberDiff line numberDiff line change
@@ -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 "rts", 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+
"nonReinstallablePkgs" $= 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

nix-tools/nix-tools/plan2nix/Plan2Nix/Plan.hs

+1
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,5 @@ data Package = Package
4747
, packageFlags :: HashMap VarName Bool
4848
, packageSrc :: Maybe PkgSrc
4949
, packageHasDescriptionOverride :: Bool
50+
, packagePreExisting :: Bool
5051
} deriving (Show)

0 commit comments

Comments
 (0)