Skip to content

Commit 8a754bd

Browse files
authored
Fix union version ranges (#117)
* Fix union version ranges * Fixes for latest aeson
1 parent e109c94 commit 8a754bd

File tree

5 files changed

+23
-17
lines changed

5 files changed

+23
-17
lines changed

cabal.project

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
index-state: 2022-02-02T00:00:00Z
1+
index-state: 2022-07-25T00:00:00Z
22

33
packages: .
44

@@ -9,7 +9,3 @@ source-repository-package
99
location: https://github.com/michaelpj/hackage-db.git
1010
tag: f3b9240212b036391871e4ea09891e91efcea7a1
1111
--sha256: sha256-n0ATmkwtR68E2FuZK3QIQgZirVmWbd21vIQmzhGKsRw=
12-
13-
-- hnix requires hnix-store-core < 0.2, however hnix-store-core-0.1 breaks
14-
-- plan construction.
15-
allow-newer: hnix-store-core

lib/Cabal2Nix.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ instance ToNixExpr (VersionRangeF VersionRange) where
446446
toNix (OrEarlierVersionF ver) = (mkSym "compiler" @. "version") @. "le" @@ mkStr (fromString (show (pretty ver)))
447447
toNix (MajorBoundVersionF ver) = toNix (IntersectVersionRangesF (orLaterVersion ver) (earlierVersion (majorUpperBound ver)))
448448
toNix (IntersectVersionRangesF v1 v2) = toNix (projectVersionRange v1) $&& toNix (projectVersionRange v2)
449-
toNix x = error $ "ToNixExpr VersionRange for `" ++ show x ++ "` not implemented!"
449+
toNix (UnionVersionRangesF v1 v2) = toNix (projectVersionRange v1) $|| toNix (projectVersionRange v2)
450450

451451
instance ToNixExpr a => ToNixExpr (Condition a) where
452452
toNix (Var a) = toNix a

lts2nix/Main.hs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ import Nix.Pretty (prettyNix)
1717
import Nix.Expr
1818

1919
import Data.Aeson
20+
import qualified Data.Aeson.Key as Key
21+
import Data.Aeson.KeyMap (KeyMap)
22+
import qualified Data.Aeson.KeyMap as KeyMap
2023
import qualified Data.HashMap.Strict as Map
2124
import qualified Data.Vector as V
2225
import Lens.Micro
@@ -64,8 +67,8 @@ lts2plan compilerPackagesMap lts = Plan { packages, compilerVersion, compilerPac
6467
where vrToPkg v = Package v Nothing Map.empty
6568

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

8286
packages = packages' `Map.union` compilerPackages'

nix/sources.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
"homepage": "https://input-output-hk.github.io/haskell.nix",
66
"owner": "input-output-hk",
77
"repo": "haskell.nix",
8-
"rev": "aaae688f4700c788243e5c5508c5e17e0f8f50ab",
9-
"sha256": "0b7ih529mfq72sfpmzix8r6zqgvqwcz0j9va9z9qm5gr3hb2y698",
8+
"rev": "e3397e0ace4aeadefe941241bd5b7bfefad850a9",
9+
"sha256": "0gllf109mpj6jlzh0nhgvxg2gq6gm8gbbh34fgbysjzz7j7l1ph0",
1010
"type": "tarball",
11-
"url": "https://github.com/input-output-hk/haskell.nix/archive/aaae688f4700c788243e5c5508c5e17e0f8f50ab.tar.gz",
11+
"url": "https://github.com/input-output-hk/haskell.nix/archive/e3397e0ace4aeadefe941241bd5b7bfefad850a9.tar.gz",
1212
"url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
1313
},
1414
"niv": {

plan2nix/Plan2Nix.hs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ module Plan2Nix
77
) where
88

99
import Data.Aeson
10+
import qualified Data.Aeson.Key as Key
11+
import qualified Data.Aeson.KeyMap as KeyMap
1012
import Data.Char ( isDigit )
1113
import Data.HashMap.Strict ( HashMap )
1214
import qualified Data.HashMap.Strict as Map
@@ -198,13 +200,15 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
198200
(_, "global") -> Just $ Package
199201
{ packageVersion = pkg ^. key "pkg-version" . _String
200202
, packageRevision = Nothing
201-
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
203+
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
204+
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
202205
, packageSrc = Nothing
203206
}
204207
(_, "inplace") -> Just $ Package
205208
{ packageVersion = pkg ^. key "pkg-version" . _String
206209
, packageRevision = Nothing
207-
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
210+
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
211+
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
208212
, packageSrc = Nothing
209213
}
210214
-- Until we figure out how to force Cabal to reconfigure just about any package
@@ -226,13 +230,15 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
226230
("local", "local") -> Just $ Package
227231
{ packageVersion = pkg ^. key "pkg-version" . _String
228232
, packageRevision = Nothing
229-
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
233+
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
234+
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
230235
, packageSrc = Just . LocalPath . Text.unpack $ pkg ^. key "pkg-src" . key "path" . _String
231236
}
232237
(_, "source-repo") -> Just $ Package
233238
{ packageVersion = pkg ^. key "pkg-version" . _String
234239
, packageRevision = Nothing
235-
, packageFlags = Map.mapKeys VarName $ Map.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
240+
, packageFlags = Map.fromList . fmap (\(k, v) -> (VarName (Key.toText k), v))
241+
. KeyMap.toList $ KeyMap.mapMaybe (^? _Bool) $ pkg ^. key "flags" . _Object
236242
, packageSrc = Just . flip DVCS [ Text.unpack $ fromMaybe "." $ pkg ^? key "pkg-src" . key "source-repo" . key "subdir" . _String ] $
237243
Git ( Text.unpack $ pkg ^. key "pkg-src" . key "source-repo" . key "location" . _String )
238244
( Text.unpack $ pkg ^. key "pkg-src" . key "source-repo" . key "tag" . _String )
@@ -270,7 +276,7 @@ value2plan plan = Plan { packages, components, extras, compilerVersion, compiler
270276
-- If it does not exist then look for `component-name` instead.
271277
maybe
272278
[nixComponentAttr $ pkg ^. key "component-name" . _String]
273-
(map nixComponentAttr . Map.keys)
279+
(map (nixComponentAttr . Key.toText) . KeyMap.keys)
274280
(pkg ^? key "components" . _Object))
275281
$ Vector.toList (plan ^. key "install-plan" . _Array)
276282

0 commit comments

Comments
 (0)