Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions cabal.project
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
index-state: 2022-02-02T00:00:00Z
index-state: 2022-07-25T00:00:00Z

packages: .

Expand All @@ -9,7 +9,3 @@ source-repository-package
location: https://github.com/michaelpj/hackage-db.git
tag: f3b9240212b036391871e4ea09891e91efcea7a1
--sha256: sha256-n0ATmkwtR68E2FuZK3QIQgZirVmWbd21vIQmzhGKsRw=

-- hnix requires hnix-store-core < 0.2, however hnix-store-core-0.1 breaks
-- plan construction.
allow-newer: hnix-store-core
2 changes: 1 addition & 1 deletion lib/Cabal2Nix.hs
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ instance ToNixExpr (VersionRangeF VersionRange) where
toNix (OrEarlierVersionF ver) = (mkSym "compiler" @. "version") @. "le" @@ mkStr (fromString (show (pretty ver)))
toNix (MajorBoundVersionF ver) = toNix (IntersectVersionRangesF (orLaterVersion ver) (earlierVersion (majorUpperBound ver)))
toNix (IntersectVersionRangesF v1 v2) = toNix (projectVersionRange v1) $&& toNix (projectVersionRange v2)
toNix x = error $ "ToNixExpr VersionRange for `" ++ show x ++ "` not implemented!"
toNix (UnionVersionRangesF v1 v2) = toNix (projectVersionRange v1) $|| toNix (projectVersionRange v2)

instance ToNixExpr a => ToNixExpr (Condition a) where
toNix (Var a) = toNix a
Expand Down
10 changes: 7 additions & 3 deletions lts2nix/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ import Nix.Pretty (prettyNix)
import Nix.Expr

import Data.Aeson
import qualified Data.Aeson.Key as Key
import Data.Aeson.KeyMap (KeyMap)
import qualified Data.Aeson.KeyMap as KeyMap
import qualified Data.HashMap.Strict as Map
import qualified Data.Vector as V
import Lens.Micro
Expand Down Expand Up @@ -64,8 +67,8 @@ lts2plan compilerPackagesMap lts = Plan { packages, compilerVersion, compilerPac
where vrToPkg v = Package v Nothing Map.empty

-- turn flags into HashMap Text (HashMap Text Bool)
flags :: Map.HashMap Text (Map.HashMap Text Bool)
flags = lts ^. key "flags" . _Object <&> (\v -> Map.mapMaybe (^? _Bool) $ v ^. _Object)
flags :: KeyMap (KeyMap Bool)
flags = lts ^. key "flags" . _Object <&> (\v -> KeyMap.mapMaybe (^? _Bool) $ v ^. _Object)
packages' = Map.fromList . V.toList $ lts ^. key "packages" . _Array <&> \v ->
let (pkg, rev) = case (parsePackageIdentifier . Text.unpack $ v ^. key "hackage" . _String) of
Just p -> p
Expand All @@ -76,7 +79,8 @@ lts2plan compilerPackagesMap lts = Plan { packages, compilerVersion, compilerPac
, packageRevision = case rev of
Just (Left sha) -> Just $ Text.pack sha
_ -> Nothing
, packageFlags = Map.mapKeys VarName $ Map.lookupDefault Map.empty name flags
, packageFlags = Map.fromList . fmap (\(k, val) -> (VarName (Key.toText k), val))
. KeyMap.toList . fromMaybe mempty $ KeyMap.lookup (Key.fromText name) flags
})

packages = packages' `Map.union` compilerPackages'
6 changes: 3 additions & 3 deletions nix/sources.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
"homepage": "https://input-output-hk.github.io/haskell.nix",
"owner": "input-output-hk",
"repo": "haskell.nix",
"rev": "aaae688f4700c788243e5c5508c5e17e0f8f50ab",
"sha256": "0b7ih529mfq72sfpmzix8r6zqgvqwcz0j9va9z9qm5gr3hb2y698",
"rev": "e3397e0ace4aeadefe941241bd5b7bfefad850a9",
"sha256": "0gllf109mpj6jlzh0nhgvxg2gq6gm8gbbh34fgbysjzz7j7l1ph0",
"type": "tarball",
"url": "https://github.com/input-output-hk/haskell.nix/archive/aaae688f4700c788243e5c5508c5e17e0f8f50ab.tar.gz",
"url": "https://github.com/input-output-hk/haskell.nix/archive/e3397e0ace4aeadefe941241bd5b7bfefad850a9.tar.gz",
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
},
"niv": {
Expand Down
16 changes: 11 additions & 5 deletions plan2nix/Plan2Nix.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ module Plan2Nix
) where

import Data.Aeson
import qualified Data.Aeson.Key as Key
import qualified Data.Aeson.KeyMap as KeyMap
import Data.Char ( isDigit )
import Data.HashMap.Strict ( HashMap )
import qualified Data.HashMap.Strict as Map
Expand Down Expand Up @@ -198,13 +200,15 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
(_, "global") -> Just $ Package
{ packageVersion = pkg ^. key "pkg-version" . _String
, packageRevision = Nothing
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageSrc = Nothing
}
(_, "inplace") -> Just $ Package
{ packageVersion = pkg ^. key "pkg-version" . _String
, packageRevision = Nothing
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageSrc = Nothing
}
-- Until we figure out how to force Cabal to reconfigure just about any package
Expand All @@ -226,13 +230,15 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
("local", "local") -> Just $ Package
{ packageVersion = pkg ^. key "pkg-version" . _String
, packageRevision = Nothing
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageSrc = Just . LocalPath . Text.unpack $ pkg ^. key "pkg-src" . key "path" . _String
}
(_, "source-repo") -> Just $ Package
{ packageVersion = pkg ^. key "pkg-version" . _String
, packageRevision = Nothing
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
, packageSrc = Just . flip DVCS [ Text.unpack $ fromMaybe "." $ pkg ^? key "pkg-src" . key "source-repo" . key "subdir" . _String ] $
Git ( Text.unpack $ pkg ^. key "pkg-src" . key "source-repo" . key "location" . _String )
( Text.unpack $ pkg ^. key "pkg-src" . key "source-repo" . key "tag" . _String )
Expand Down Expand Up @@ -270,7 +276,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
-- If it does not exist then look for `component-name` instead.
maybe
[nixComponentAttr $ pkg ^. key "component-name" . _String]
(map nixComponentAttr . Map.keys)
(map (nixComponentAttr . Key.toText) . KeyMap.keys)
(pkg ^? key "components" . _Object))
$ Vector.toList (plan ^. key "install-plan" . _Array)

Expand Down