staversion 0.2.1.0 → 0.2.1.1
raw patch · 17 files changed
+170/−44 lines, 17 filesdep ~Cabaldep ~megaparsecPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependency ranges changed: Cabal, megaparsec
API changes (from Hackage documentation)
+ Staversion.Internal.Version: ExclusiveBound :: Bound
+ Staversion.Internal.Version: InclusiveBound :: Bound
+ Staversion.Internal.Version: LowerBound :: Version -> ~Bound -> LowerBound
+ Staversion.Internal.Version: NoUpperBound :: UpperBound
+ Staversion.Internal.Version: UpperBound :: Version -> ~Bound -> UpperBound
+ Staversion.Internal.Version: asVersionIntervals :: VersionRange -> [VersionInterval]
+ Staversion.Internal.Version: data Bound :: *
+ Staversion.Internal.Version: data LowerBound :: *
+ Staversion.Internal.Version: data UpperBound :: *
+ Staversion.Internal.Version: data Version :: *
+ Staversion.Internal.Version: data VersionRange :: *
+ Staversion.Internal.Version: fromVersionIntervals :: VersionIntervals -> VersionRange
+ Staversion.Internal.Version: mkVersion :: [Int] -> Version
+ Staversion.Internal.Version: mkVersionIntervals :: [VersionInterval] -> Maybe VersionIntervals
+ Staversion.Internal.Version: parseVersionText :: Text -> Maybe Version
+ Staversion.Internal.Version: showBaseVersion :: BaseVersion -> String
+ Staversion.Internal.Version: simplifyVersionRange :: VersionRange -> VersionRange
+ Staversion.Internal.Version: thisVersion :: Version -> VersionRange
+ Staversion.Internal.Version: type BaseVersion = Version
+ Staversion.Internal.Version: type VersionInterval = (LowerBound, UpperBound)
+ Staversion.Internal.Version: unionVersionRanges :: VersionRange -> VersionRange -> VersionRange
+ Staversion.Internal.Version: versionNumbers :: Version -> [Int]
Files
- ChangeLog.md +6/−0
- src/Staversion/Internal/Aggregate.hs +5/−5
- src/Staversion/Internal/BuildPlan.hs +2/−1
- src/Staversion/Internal/BuildPlan/Hackage.hs +1/−1
- src/Staversion/Internal/BuildPlan/Version.hs +1/−7
- src/Staversion/Internal/Cabal.hs +1/−2
- src/Staversion/Internal/Command.hs +2/−2
- src/Staversion/Internal/Format.hs +5/−4
- src/Staversion/Internal/Megaparsec.hs +51/−0
- src/Staversion/Internal/Result.hs +1/−2
- src/Staversion/Internal/Version.hs +68/−0
- staversion.cabal +7/−5
- test/Staversion/Internal/AggregateSpec.hs +1/−1
- test/Staversion/Internal/BuildPlan/VersionSpec.hs +3/−3
- test/Staversion/Internal/BuildPlanSpec.hs +10/−7
- test/Staversion/Internal/ExecSpec.hs +2/−1
- test/Staversion/Internal/TestUtil.hs +4/−3
ChangeLog.md view
@@ -1,5 +1,11 @@ # Revision history for staversion +## 0.2.1.1 -- 2017-07-29++* Support `megaparsec-6.0`, with compatibility wrapper "Staversion.Internal.Megaparsec".+* Support `Cabal-2.0`, with compatibility wrapper "Staversion.Internal.Version".++ ## 0.2.1.0 -- 2017-06-18 * Add `--format-version` option.
src/Staversion/Internal/Aggregate.hs view
@@ -35,17 +35,17 @@ import qualified Data.List.NonEmpty as NL import Data.Text (unpack) import Data.Traversable (traverse)-import Data.Version (Version, makeVersion)-import Distribution.Version (VersionRange) import qualified Distribution.Text as DT-import qualified Distribution.Version as V import qualified Text.PrettyPrint as Pretty import Staversion.Internal.Cabal (Target(..)) import Staversion.Internal.Query (PackageName, ErrorMsg) import Staversion.Internal.Log (LogEntry(..), LogLevel(..)) import Staversion.Internal.Result (Result(..), AggregatedResult(..), ResultBody, ResultBody'(..), resultSourceDesc)+import Staversion.Internal.Version (Version, mkVersion, VersionRange)+import qualified Staversion.Internal.Version as V + -- | Aggregate some 'Version's into a 'VersionRange'. type Aggregator = NonEmpty Version -> VersionRange @@ -94,8 +94,8 @@ aggPvpGeneral :: ([Int] -> [Int]) -> Aggregator aggPvpGeneral makeUpper = V.simplifyVersionRange . foldr1 V.unionVersionRanges . fmap toRange . NL.nub . NL.sort where toRange v = fromJust $ fmap V.fromVersionIntervals $ V.mkVersionIntervals [(V.LowerBound norm_v V.InclusiveBound, V.UpperBound vu V.ExclusiveBound)] where- norm_v = makeVersion $ normalizeTralingZeroes $ V.versionBranch v- vu = makeVersion $ makeUpper $ V.versionBranch norm_v+ norm_v = V.mkVersion $ normalizeTralingZeroes $ V.versionNumbers v+ vu = V.mkVersion $ makeUpper $ V.versionNumbers norm_v normalizeTralingZeroes :: [Int] -> [Int] normalizeTralingZeroes [] = []
src/Staversion/Internal/BuildPlan.hs view
@@ -34,7 +34,6 @@ import Data.Monoid (Monoid, (<>), mconcat) import Data.Text (Text, unpack) import Data.Traversable (Traversable(traverse))-import Data.Version (Version) import Data.Word (Word) import qualified Data.Yaml as Yaml import System.FilePath ((</>), (<.>))@@ -62,6 +61,8 @@ fetchBuildPlanYAML ) import Staversion.Internal.BuildPlan.Version (unVersionJSON)+import Staversion.Internal.Version (Version)+ -- | A data structure that keeps a map between package names and their -- versions.
src/Staversion/Internal/BuildPlan/Hackage.hs view
@@ -19,11 +19,11 @@ import qualified Data.ByteString.Lazy as BSL import Data.List (sort, reverse) import Data.Text (unpack)-import Data.Version (Version) import Staversion.Internal.BuildPlan.Version (unVersionJSON) import Staversion.Internal.Query (ErrorMsg, PackageName) import Staversion.Internal.HTTP (Manager, fetchURL, OurHttpException)+import Staversion.Internal.Version (Version) data RegisteredVersions = RegisteredVersions { regPreferredVersions :: [Version] -- ^ Sorted list of preferred versions of the package.
src/Staversion/Internal/BuildPlan/Version.hs view
@@ -13,14 +13,8 @@ import Data.Aeson (FromJSON(..), Value(..)) import Data.Maybe (listToMaybe) import Data.Text (Text, unpack)-import Data.Version (Version, parseVersion)-import Text.ParserCombinators.ReadP (readP_to_S) --- | Parse a version text. There must not be any trailing characters--- after a valid version text.-parseVersionText :: Text -> Maybe Version-parseVersionText = extractResult . (readP_to_S parseVersion) . unpack where- extractResult = listToMaybe . map fst . filter (\pair -> snd pair == "")+import Staversion.Internal.Version (parseVersionText, Version) -- | a wrapper around 'Version' for JSON I/F newtype VersionJSON = VersionJSON { unVersionJSON :: Version } deriving (Show,Eq,Ord)
src/Staversion/Internal/Cabal.hs view
@@ -21,9 +21,8 @@ import Data.Text (pack, Text) import qualified Data.Text as T import qualified Data.Text.IO as TIO-import qualified Text.Megaparsec as P-import qualified Text.Megaparsec.Text as P +import qualified Staversion.Internal.Megaparsec as P import Staversion.Internal.Query ( PackageName, ErrorMsg )
src/Staversion/Internal/Command.hs view
@@ -14,7 +14,6 @@ import Data.Function (on) import Data.Monoid (mconcat, (<>)) import Data.Text (pack)-import Data.Version (showVersion) import qualified Options.Applicative as Opt import qualified Paths_staversion as MyInfo import System.Directory (getHomeDirectory)@@ -35,6 +34,7 @@ parseQuery, PackageSource(..) )+import Staversion.Internal.Version (showBaseVersion) -- | Command from the user. data Command =@@ -203,7 +203,7 @@ Opt.progDesc ( "Look for version numbers for Haskell packages in specific stackage resolvers" ++ " (or possibly other package sources)" ),- Opt.footer ("Version: " ++ (showVersion MyInfo.version))+ Opt.footer ("Version: " ++ (showBaseVersion MyInfo.version)) ] parseCommandArgs :: IO Command
src/Staversion/Internal/Format.hs view
@@ -23,8 +23,6 @@ import qualified Data.Text as Text import qualified Data.Text.Lazy as TL import Data.Text.Lazy.Builder (Builder, toLazyText, fromText, fromString)-import Distribution.Version (VersionRange)-import qualified Distribution.Version as V import Staversion.Internal.Aggregate ( groupAllPreservingOrderBy,@@ -41,7 +39,10 @@ ) import Staversion.Internal.Cabal (Target(..)) import Staversion.Internal.Log (LogEntry)+import Staversion.Internal.Version (VersionRange)+import qualified Staversion.Internal.Version as V + -- | Format for 'VersionRange'. type FormatVersion = VersionRange -> Text @@ -62,11 +63,11 @@ else fallback _ -> fallback where- formatV v = pack $ concat $ intersperse "." $ map show $ V.versionBranch v+ formatV v = pack $ concat $ intersperse "." $ map show $ V.versionNumbers v fallback = formatVersionCabal $ V.fromVersionIntervals $ fromJust $ V.mkVersionIntervals [vi] isCaretOK :: V.Version -> V.Version -> Bool-isCaretOK inc_lv exc_uv = isCaretOK' (V.versionBranch inc_lv) (V.versionBranch exc_uv) where+isCaretOK inc_lv exc_uv = isCaretOK' (V.versionNumbers inc_lv) (V.versionNumbers exc_uv) where isCaretOK' [] uv' = uv' == [0,1] isCaretOK' [x] uv' = uv' == [x,1] isCaretOK' (x : y : _) uv' = uv' == [x,y+1]
+ src/Staversion/Internal/Megaparsec.hs view
@@ -0,0 +1,51 @@+{-# LANGUAGE CPP #-}+-- |+-- Module: Staversion.Internal.Megaparsec+-- Description: Megaparsec compatibility wrapper+-- Maintainer: Toshio Ito <debug.ito@gmail.com>+--+-- __This is an internal module. End-users should not use it.__+module Staversion.Internal.Megaparsec+ ( module Text.Megaparsec,+ Parser,++#if MIN_VERSION_megaparsec(6,0,0)+ module Text.Megaparsec.Char,+ string,+ string'+#endif+ ) where++import Text.Megaparsec++#if MIN_VERSION_megaparsec(6,0,0)+import Data.Text (Text, pack, unpack)+import Data.Void (Void)+import Text.Megaparsec.Char hiding (string, string')+import qualified Text.Megaparsec.Char as MC++-- | See: https://github.com/fpco/stackage/issues/2666#issuecomment-318472919+type Parser = Parsec (ErrorFancy Void) Text++liftToString :: Monad m => (Text -> m Text) -> String -> m String+liftToString f = fmap unpack . f . pack++-- | 'string' combatible with Megaparsec 5. In Megaparsec 6, 'string'+-- function takes and produces 'Text' if we use 'Text' as the 'Stream'+-- type, probably for better performance.+string :: String -> Parser String+string = liftToString MC.string++-- | 'string'' combatible with Megaparsec 5.+string' :: String -> Parser String+string' = liftToString MC.string'++#else++import Data.Text (Text)++-- | From "Text.Megaparsec.Text".+type Parser = Parsec Dec Text++#endif+
src/Staversion/Internal/Result.hs view
@@ -17,13 +17,12 @@ import Data.List.NonEmpty (NonEmpty(..)) import Data.Monoid ((<>)) import Data.Text (Text)-import Data.Version (Version)-import Distribution.Version (VersionRange, thisVersion) import Staversion.Internal.Query ( Query, PackageSource, ErrorMsg, PackageName, sourceDesc ) import Staversion.Internal.Cabal (Target)+import Staversion.Internal.Version (Version, VersionRange, thisVersion) -- | Result for a query. data Result = Result { resultIn :: ResultSource,
+ src/Staversion/Internal/Version.hs view
@@ -0,0 +1,68 @@+{-# LANGUAGE CPP #-}+-- |+-- Module: Staversion.Internal.Version+-- Description: Compatibility wrapper for Distribution.Version+-- Maintainer: Toshio Ito <debug.ito@gmail.com>+--+-- __This is an internal module. End-users should not use it.__+module Staversion.Internal.Version+ ( -- * Re-exports+ V.Version,+ V.VersionRange,+ V.LowerBound(..),+ V.UpperBound(..),+ V.Bound(..),+ V.VersionInterval,+ V.thisVersion,+ V.unionVersionRanges,+ V.simplifyVersionRange,+ V.fromVersionIntervals,+ V.mkVersionIntervals,+ V.asVersionIntervals,+ -- * Compatibility+ mkVersion,+ versionNumbers,+ -- * Util+ BaseVersion,+ showBaseVersion,+ parseVersionText+ ) where++import Data.Maybe (listToMaybe)+import Data.Text (Text, unpack)+import qualified Distribution.Version as V+import Data.Version (parseVersion)+import qualified Data.Version as BaseV+import Text.ParserCombinators.ReadP (readP_to_S)++-- | A Version type by "Data.Version".+type BaseVersion = BaseV.Version++showBaseVersion :: BaseVersion -> String+showBaseVersion = BaseV.showVersion++baseVToV :: BaseV.Version -> V.Version+baseVToV = mkVersion . BaseV.versionBranch++-- | Parse a version text. There must not be any trailing characters+-- after a valid version text.+parseVersionText :: Text -> Maybe V.Version+parseVersionText = extractResult . (readP_to_S parseVersion) . unpack where+ extractResult = fmap baseVToV . listToMaybe . map fst . filter (\pair -> snd pair == "")++#if MIN_VERSION_Cabal(2,0,0)+mkVersion :: [Int] -> V.Version+mkVersion = V.mkVersion++versionNumbers :: V.Version -> [Int]+versionNumbers = V.versionNumbers++#else++mkVersion :: [Int] -> V.Version+mkVersion vs = V.Version vs []++versionNumbers :: V.Version -> [Int]+versionNumbers = V.versionBranch++#endif
staversion.cabal view
@@ -1,5 +1,5 @@ name: staversion-version: 0.2.1.0+version: 0.2.1.1 author: Toshio Ito <debug.ito@gmail.com> maintainer: Toshio Ito <debug.ito@gmail.com> license: BSD3@@ -42,9 +42,11 @@ Staversion.Internal.Log, Staversion.Internal.Exec, Staversion.Internal.Format,- Staversion.Internal.Aggregate+ Staversion.Internal.Aggregate,+ Staversion.Internal.Version other-modules: Paths_staversion,- Staversion.Internal.HTTP+ Staversion.Internal.HTTP,+ Staversion.Internal.Megaparsec build-depends: base >=4.8 && <4.10, unordered-containers >=0.2.3 && <0.3, aeson >=0.8.0 && <1.3,@@ -60,9 +62,9 @@ http-types >=0.8.6 && <0.10, transformers >=0.3.0 && <0.6, transformers-compat >=0.4.0 && <0.6,- megaparsec >=4.2.0 && <5.4,+ megaparsec >=4.2.0 && <6.1, semigroups >=0.18.0.1 && <0.19,- Cabal >=1.22.6.0 && <1.25,+ Cabal >=1.22.6.0 && <2.1, pretty >=1.1.2.0 && <1.2, ansi-wl-pprint >=0.6.7.3 && <0.7
test/Staversion/Internal/AggregateSpec.hs view
@@ -5,7 +5,6 @@ import Data.List.NonEmpty (NonEmpty(..)) import qualified Data.List.NonEmpty as NL import Data.Monoid (All(..))-import qualified Distribution.Version as V import Test.Hspec import Staversion.Internal.Aggregate@@ -32,6 +31,7 @@ vors, vors', vint )+import qualified Staversion.Internal.Version as V main :: IO () main = hspec spec
test/Staversion/Internal/BuildPlan/VersionSpec.hs view
@@ -1,9 +1,9 @@ module Staversion.Internal.BuildPlan.VersionSpec (main,spec) where import Data.Text (pack)-import Data.Version (Version(..)) import Test.Hspec +import Staversion.Internal.Version (Version, mkVersion) import Staversion.Internal.BuildPlan.Version (parseVersionText) main :: IO ()@@ -14,8 +14,8 @@ parseVersionText_spec :: Spec parseVersionText_spec = describe "parseVersionText" $ do- spec_v "0.1.0.6" $ Just (Version [0,1,0,6] [])- spec_v "10.11" $ Just (Version [10,11] [])+ spec_v "0.1.0.6" $ Just (mkVersion [0,1,0,6])+ spec_v "10.11" $ Just (mkVersion [10,11]) where spec_v input_v expected = specify input_v $ do parseVersionText (pack input_v) `shouldBe` expected
test/Staversion/Internal/BuildPlanSpec.hs view
@@ -1,7 +1,6 @@ module Staversion.Internal.BuildPlanSpec (main,spec) where import Data.Text (Text, pack)-import Data.Version (Version(..)) import Data.Word (Word) import System.FilePath ((</>), (<.>)) import Test.Hspec@@ -18,7 +17,11 @@ loadBuildPlan, buildPlanSource )+import Staversion.Internal.Version (Version) +import Staversion.Internal.TestUtil (ver)++ main :: IO () main = hspec spec @@ -31,19 +34,19 @@ packageVersion_spec = describe "packageVersion" $ do forBuildPlanMap "conpact_build_plan" $ \loader -> do specify "drawille -> 0.1.0.6" $ do- loadVersion "drawille" loader `shouldReturn` Just (Version [0,1,0,6] [])+ loadVersion "drawille" loader `shouldReturn` Just (ver [0,1,0,6]) specify "unknown -> Nothing" $ do loadVersion "unknown" loader `shouldReturn` Nothing specify "ghc -> 7.10.3" $ do- loadVersion "ghc" loader `shouldReturn` Just (Version [7,10,3] [])+ loadVersion "ghc" loader `shouldReturn` Just (ver [7,10,3]) specify "base -> 4.8.2.0" $ do- loadVersion "base" loader `shouldReturn` Just (Version [4,8,2,0] [])+ loadVersion "base" loader `shouldReturn` Just (ver [4,8,2,0]) forBuildPlanMap "lts-4.2" $ \loader -> do specify "conduit -> 1.2.6.1" $ do- loadVersion "conduit" loader `shouldReturn` Just (Version [1,2,6,1] [])+ loadVersion "conduit" loader `shouldReturn` Just (ver [1,2,6,1]) specify "transformers -> 0.4.2.0" $ do- loadVersion "transformers" loader `shouldReturn` Just (Version [0,4,2,0] [])+ loadVersion "transformers" loader `shouldReturn` Just (ver [0,4,2,0]) forBuildPlanMap :: String -> (IO BuildPlanMap -> Spec) -> Spec@@ -70,5 +73,5 @@ it "reads local file after disambiguation" $ do bp_man <- mockBuildPlanManager 4 2 bp <- either (\e -> error ("Error: " ++ e)) return =<< loadBuildPlan bp_man [] (SourceStackage "lts")- packageVersion bp "base" `shouldBe` (Just $ Version [4,8,2,0] [])+ packageVersion bp "base" `shouldBe` (Just $ ver [4,8,2,0]) buildPlanSource bp `shouldBe` SourceStackage "lts-4.2"
test/Staversion/Internal/ExecSpec.hs view
@@ -1,6 +1,5 @@ module Staversion.Internal.ExecSpec (main,spec) where -import Data.Version (Version(Version)) import Data.Either (isLeft) import Data.IORef (readIORef) import Data.List (isInfixOf)@@ -26,6 +25,8 @@ ) import Staversion.Internal.Log (defaultLogger, _mockLogger, Logger(loggerThreshold), LogLevel(..), LogEntry(..)) import Staversion.Internal.Cabal (Target(..))+import Staversion.Internal.Version (Version)+ import Staversion.Internal.TestUtil (ver, simpleResultBody, verPairs)
test/Staversion/Internal/TestUtil.hs view
@@ -8,14 +8,15 @@ ) where import Data.Maybe (fromJust)-import Data.Version (Version(..))-import qualified Distribution.Version as V import Staversion.Internal.Query ( PackageName ) import Staversion.Internal.Result (ResultBody, ResultBody'(..))+import Staversion.Internal.Version (Version)+import qualified Staversion.Internal.Version as V + ver :: [Int] -> Version-ver vs = Version vs []+ver = V.mkVersion verMaybe :: [Int] -> Maybe Version verMaybe [] = Nothing