1
1
mirror of https://github.com/sol/hpack.git synced 2024-10-04 03:38:00 +03:00

Cabal 3.4 compat

This commit is contained in:
Simon Hengel 2021-02-08 14:19:27 +07:00
parent d41fa1354e
commit 2b7f375fb0
5 changed files with 48 additions and 30 deletions

View File

@ -1,6 +1,6 @@
cabal-version: 1.12
-- This file has been generated from package.yaml by hpack version 0.34.2.
-- This file has been generated from package.yaml by hpack version 0.34.3.
--
-- see: https://github.com/sol/hpack
@ -27,7 +27,7 @@ library
src
ghc-options: -Wall
build-depends:
Cabal >=3.0.0.0
Cabal >=3.0.0.0 && <3.6
, Glob >=0.9.0
, aeson >=1.4.3.0
, base >=4.9 && <5
@ -85,7 +85,7 @@ executable hpack
driver
ghc-options: -Wall
build-depends:
Cabal >=3.0.0.0
Cabal >=3.0.0.0 && <3.6
, Glob >=0.9.0
, aeson >=1.4.3.0
, base >=4.9 && <5
@ -121,7 +121,7 @@ test-suite spec
ghc-options: -Wall
cpp-options: -DTEST
build-depends:
Cabal >=3.0.0.0
Cabal >=3.0.0.0 && <3.6
, Glob >=0.9.0
, HUnit >=1.6.0.0
, QuickCheck

View File

@ -23,7 +23,7 @@ dependencies:
- yaml >= 0.10.0
- aeson >= 1.4.3.0
- scientific
- Cabal >= 3.0.0.0
- Cabal >= 3.0.0.0 && < 3.6
- pretty
- bifunctors
- cryptonite

View File

@ -1,3 +1,4 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
@ -19,6 +20,12 @@ import Data.Map.Lazy (Map)
import qualified Data.Map.Lazy as Map
import GHC.Exts
#if MIN_VERSION_Cabal(3,4,0)
import qualified Distribution.Compat.NonEmptySet as DependencySet
#else
import qualified Data.Set as DependencySet
#endif
import Data.Aeson.Config.FromValue
import Data.Aeson.Config.Types
@ -67,7 +74,7 @@ parseDependency :: Fail.MonadFail m => String -> Text -> m (String, DependencyVe
parseDependency subject = fmap fromCabal . cabalParse subject . T.unpack
where
fromCabal :: D.Dependency -> (String, DependencyVersion)
fromCabal d = (toName (D.depPkgName d) (toList $ D.depLibraries d), DependencyVersion Nothing . versionConstraintFromCabal $ D.depVerRange d)
fromCabal d = (toName (D.depPkgName d) (DependencySet.toList $ D.depLibraries d), DependencyVersion Nothing . versionConstraintFromCabal $ D.depVerRange d)
toName :: D.PackageName -> [D.LibraryName] -> String
toName package components = prettyShow package <> case components of

View File

@ -1,6 +1,7 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ViewPatterns #-}
module Hpack.Syntax.DependencyVersion (
githubBaseUrl
, GitRef
@ -33,11 +34,11 @@ import qualified Data.Text as T
import qualified Data.HashMap.Strict as HashMap
import Text.PrettyPrint (renderStyle, Style(..), Mode(..))
import Distribution.Version (VersionRangeF(..))
import qualified Distribution.Version as D
import qualified Distribution.Parsec as D
import qualified Distribution.Pretty as D
import qualified Distribution.Types.VersionRange.Internal as D
import Data.Aeson.Config.FromValue
@ -147,32 +148,42 @@ cabalParse subject s = case D.eitherParsec s of
Right d -> return d
Left _ ->fail $ unwords ["invalid", subject, show s]
renderVersionRange :: D.VersionRange -> String
renderVersionRange = \ case
D.IntersectVersionRanges (D.OrLaterVersion x) (D.EarlierVersion y) | differByOneInLeastPosition (x, y) -> "==" ++ render x ++ ".*"
v -> render v
where
differByOneInLeastPosition = \ case
(reverse . D.versionNumbers -> x : xs, reverse . D.versionNumbers -> y : ys) -> xs == ys && succ x == y
_ -> False
render :: D.Pretty a => a -> String
render = renderStyle (Style OneLineMode 0 0) . D.pretty
versionConstraintFromCabal :: D.VersionRange -> VersionConstraint
versionConstraintFromCabal range
| D.isAnyVersion range = AnyVersion
| otherwise = VersionRange . renderStyle style .
D.pretty
$ toPreCabal2VersionRange range
| otherwise = VersionRange . renderVersionRange $ toPreCabal2VersionRange range
where
style = Style OneLineMode 0 0
toPreCabal2VersionRange :: D.VersionRange -> D.VersionRange
toPreCabal2VersionRange = D.embedVersionRange . D.cataVersionRange f
where
f :: VersionRangeF (VersionRangeF D.VersionRange) -> VersionRangeF D.VersionRange
f :: D.VersionRangeF (D.VersionRangeF D.VersionRange) -> D.VersionRangeF D.VersionRange
f = \ case
MajorBoundVersionF v -> IntersectVersionRangesF (D.embedVersionRange lower) (D.embedVersionRange upper)
D.MajorBoundVersionF v -> D.IntersectVersionRangesF (D.embedVersionRange lower) (D.embedVersionRange upper)
where
lower = OrLaterVersionF v
upper = EarlierVersionF (D.majorUpperBound v)
lower = D.OrLaterVersionF v
upper = D.EarlierVersionF (D.majorUpperBound v)
AnyVersionF -> AnyVersionF
ThisVersionF v -> ThisVersionF v
LaterVersionF v -> LaterVersionF v
OrLaterVersionF v -> OrLaterVersionF v
EarlierVersionF v -> EarlierVersionF v
OrEarlierVersionF v -> OrEarlierVersionF v
WildcardVersionF v -> WildcardVersionF v
UnionVersionRangesF a b -> UnionVersionRangesF (D.embedVersionRange a) (D.embedVersionRange b)
IntersectVersionRangesF a b -> IntersectVersionRangesF (D.embedVersionRange a) (D.embedVersionRange b)
VersionRangeParensF a -> VersionRangeParensF (D.embedVersionRange a)
D.ThisVersionF v -> D.ThisVersionF v
D.LaterVersionF v -> D.LaterVersionF v
D.OrLaterVersionF v -> D.OrLaterVersionF v
D.EarlierVersionF v -> D.EarlierVersionF v
D.OrEarlierVersionF v -> D.OrEarlierVersionF v
D.UnionVersionRangesF a b -> D.UnionVersionRangesF (D.embedVersionRange a) (D.embedVersionRange b)
D.IntersectVersionRangesF a b -> D.IntersectVersionRangesF (D.embedVersionRange a) (D.embedVersionRange b)
#if !MIN_VERSION_Cabal(3,4,0)
D.WildcardVersionF v -> D.WildcardVersionF v
D.VersionRangeParensF a -> D.VersionRangeParensF (D.embedVersionRange a)
D.AnyVersionF -> D.AnyVersionF
#endif

View File

@ -39,8 +39,8 @@ spec = do
it "accepts dependencies with constraints" $ do
[yaml|
hpack >= 2 && < 3
|] `shouldDecodeTo_` Dependencies [("hpack", defaultInfo { dependencyInfoVersion = versionRange ">=2 && <3" })]
hpack >= 2 && < 4
|] `shouldDecodeTo_` Dependencies [("hpack", defaultInfo { dependencyInfoVersion = versionRange ">=2 && <4" })]
context "with invalid constraint" $ do
it "returns an error message" $ do
@ -56,8 +56,8 @@ spec = do
it "accepts dependencies with constraints" $ do
[yaml|
- hpack >= 2 && < 3
|] `shouldDecodeTo_` Dependencies [("hpack", defaultInfo { dependencyInfoVersion = versionRange ">=2 && <3" })]
- hpack >= 2 && < 4
|] `shouldDecodeTo_` Dependencies [("hpack", defaultInfo { dependencyInfoVersion = versionRange ">=2 && <4" })]
it "accepts ^>=" $ do
[yaml|