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:
parent
d41fa1354e
commit
2b7f375fb0
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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|
|
||||
|
Loading…
Reference in New Issue
Block a user