packages feed

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 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