git.iko.soy/typeable/stackage2nix
on master help sign in
Add support for hg location in stack.yaml
c0dca29Dmitry Bushev
src/Distribution/Nixpkgs/Haskell/Stack.hs+3−3
@@ -61,9 +61,9 @@ stackLocationToSource = \case
61 , sourceRevision = mempty
61 , sourceRevision = mempty
62 , sourceHash = UnknownHash
62 , sourceHash = UnknownHash
63 , sourceCabalDir = mempty }
63 , sourceCabalDir = mempty }
64− StackRepoGit rg -> Source
64+ StackRepo r -> Source
65− { sourceUrl = T.unpack $ rg ^. rgUri
65+ { sourceUrl = T.unpack $ r ^. rUri
66− , sourceRevision = T.unpack $ rg ^. rgCommit
66+ , sourceRevision = T.unpack $ r ^. rCommit
67 , sourceHash = UnknownHash
67 , sourceHash = UnknownHash
68 , sourceCabalDir = mempty }
68 , sourceCabalDir = mempty }
69
69
src/Stack/Config.hs+24−10
@@ -25,18 +25,22 @@ makePrisms ''StackResolver
25unStackResolver :: StackResolver -> String
25unStackResolver :: StackResolver -> String
26unStackResolver = T.unpack . fromStackResolver
26unStackResolver = T.unpack . fromStackResolver
27
27
28−data RepoGit = RepoGit
28+newtype Vcs = Vcs { fromVcs :: Text }
29+ deriving (Eq, Ord, Show)
30+
31+data Repo = Repo
32+ { _rVcs :: !Vcs
29− { _rgUri :: !Text
33+ , _rUri :: !Text
30− , _rgCommit :: !Text
34+ , _rCommit :: !Text
31 } deriving (Eq, Ord, Show)
35 } deriving (Eq, Ord, Show)
32
36
33−makeLenses ''RepoGit
37+makeLenses ''Repo
34
38
35data PackageLocation
39data PackageLocation
36 = HackagePackage Text
40 = HackagePackage Text
37 | StackFilePath FilePath
41 | StackFilePath FilePath
38 | StackUri URI
42 | StackUri URI
39− | StackRepoGit RepoGit
43+ | StackRepo Repo
40 deriving (Eq, Ord, Show)
44 deriving (Eq, Ord, Show)
41
45
42makePrisms ''PackageLocation
46makePrisms ''PackageLocation
@@ -72,18 +76,28 @@ fromYamlPackage = \case
72 Yaml.LocationSimple (Yaml.Location p extraDep) ->
76 Yaml.LocationSimple (Yaml.Location p extraDep) ->
73 StackPackage (parseSimplePath p) (fromMaybe False extraDep)
77 StackPackage (parseSimplePath p) (fromMaybe False extraDep)
74 Yaml.LocationGit (Location git extraDep) ->
78 Yaml.LocationGit (Location git extraDep) ->
75− StackPackage (StackRepoGit $ fromYamlGit git) (fromMaybe False extraDep)
79+ StackPackage (StackRepo $ fromYamlGit git) (fromMaybe False extraDep)
80+ Yaml.LocationHg (Location hg extraDep) ->
81+ StackPackage (StackRepo $ fromYamlHg hg) (fromMaybe False extraDep)
76 where
82 where
77 parseSimplePath (T.unpack -> p) = maybe (StackFilePath p) StackUri $ parseURI p
83 parseSimplePath (T.unpack -> p) = maybe (StackFilePath p) StackUri $ parseURI p
78
84
79fromYamlExtraDep :: Text -> StackPackage
85fromYamlExtraDep :: Text -> StackPackage
80fromYamlExtraDep = flip StackPackage True . HackagePackage
86fromYamlExtraDep = flip StackPackage True . HackagePackage
81
87
82−fromYamlGit :: Yaml.Git -> RepoGit
88+fromYamlGit :: Yaml.Git -> Repo
83−fromYamlGit yg = RepoGit{..}
89+fromYamlGit yg = Repo{..}
90+ where
91+ _rVcs = Vcs "git"
92+ _rUri = yg ^. gGit
93+ _rCommit = yg ^. gCommit
94+
95+fromYamlHg :: Yaml.Hg -> Repo
96+fromYamlHg yh = Repo{..}
84 where
97 where
85− _rgUri = yg ^. gGit
98+ _rVcs = Vcs "hg"
86− _rgCommit = yg ^. gCommit
99+ _rUri = yh ^. hHg
100+ _rCommit = yh ^. hCommit
87
101
88readStackConfig :: StackYaml -> IO (Either String StackConfig)
102readStackConfig :: StackYaml -> IO (Either String StackConfig)
89readStackConfig stackYaml = do
103readStackConfig stackYaml = do
src/Stack/Config/Yaml.hs+13−1
@@ -25,10 +25,20 @@ makeLenses ''Git
25
25
26deriveJSON jsonOpts ''Git
26deriveJSON jsonOpts ''Git
27
27
28+data Hg = Hg
29+ { _hHg :: !Text
30+ , _hCommit :: !Text
31+ } deriving (Eq, Show)
32+
33+makeLenses ''Hg
34+
35+deriveJSON jsonOpts ''Hg
36+
28data Package
37data Package
29 = Simple Text
38 = Simple Text
30 | LocationSimple (Location Text)
39 | LocationSimple (Location Text)
31 | LocationGit (Location Git)
40 | LocationGit (Location Git)
41+ | LocationHg (Location Hg)
32 deriving (Eq, Show)
42 deriving (Eq, Show)
33
43
34makePrisms ''Package
44makePrisms ''Package
@@ -37,13 +47,15 @@ instance FromJSON Package where
37 parseJSON v =
47 parseJSON v =
38 (Simple <$> parseJSON v) <|>
48 (Simple <$> parseJSON v) <|>
39 (LocationSimple <$> parseJSON v) <|>
49 (LocationSimple <$> parseJSON v) <|>
40− (LocationGit <$> parseJSON v)
50+ (LocationGit <$> parseJSON v) <|>
51+ (LocationHg <$> parseJSON v)
41
52
42instance ToJSON Package where
53instance ToJSON Package where
43 toJSON = \case
54 toJSON = \case
44 Simple t -> toJSON t
55 Simple t -> toJSON t
45 LocationSimple t -> toJSON t
56 LocationSimple t -> toJSON t
46 LocationGit t -> toJSON t
57 LocationGit t -> toJSON t
58+ LocationHg t -> toJSON t
47
59
48data Config = Config
60data Config = Config
49 { _cResolver :: !Text
61 { _cResolver :: !Text