staversion

What version is the package X in stackage lts-Y.ZZ? https://github.com/debug-ito/staversion

Latest on Hackage:0.2.1.0

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed and maintained by Toshio Ito

staversion

travis status

staversion is a command-line tool to look for version numbers of Haskell packages.

See --help message for detailed usage.

Package version in Stackage

staversion mainly focuses on package versions in stackage, i.e. it answers to questions like "What version is the package X in stackage lts-Y.ZZ?" It aims to make it easier to write build-depends section in YOUR_PACKAGE.cabal.

$ staversion --resolver lts-4.2 conduit
------ lts-4.2
conduit ==1.2.6.1

$ staversion --resolver lts-4.2 --resolver lts-7.0 conduit
------ lts-4.2
conduit ==1.2.6.1

------ lts-7.0
conduit ==1.2.7

$ staversion --resolver lts-4.2 --resolver lts-6 conduit base
------ lts-4.2
conduit ==1.2.6.1,
base ==4.8.2.0

------ lts-6 (lts-6.31)
conduit ==1.2.9.1,
base ==4.8.2.0

staversion first reads build plan YAML files that are stored locally in your computer, then it tries to fetch them over network.

Package version in Hackage

You can also look up the latest version numbers hosted on hackage with --hackage (-H) option.

$ staversion --hackage conduit base
------ latest in hackage
conduit ==1.2.8,
base ==4.9.0.0

Package version for build-depends

You can also specify .cabal files in the query. In that case, staversion reads build-depends fields in all sections of those .cabal files, and shows versions of the dependency packages.

$ staversion --hackage staversion.cabal 
------ latest in hackage
-- staversion.cabal - library
base ==4.9.0.0,
unordered-containers ==0.2.7.2,
aeson ==1.0.2.1,
text ==1.2.2.1,
bytestring ==0.10.8.1,
yaml ==0.8.21.1,
filepath ==1.4.1.1,
directory ==1.3.0.0,
optparse-applicative ==0.13.0.0,
containers ==0.5.9.1,
http-client ==0.5.5,
http-client-tls ==0.3.3,
http-types ==0.9.1,
transformers ==0.5.2.0,
transformers-compat ==0.5.1.4,
megaparsec ==5.1.2

(snip)

Package version ranges over different resolvers

With --aggregate (-a) option, you can aggregate version numbers in different resolvers into a version range using the given aggregation rule.

For example, or rule just concatenates versions with (||) condition.

$ staversion --aggregate or -r lts-5 -r lts-6 -r lts-7 -H aeson
------ lts-5 (lts-5.18), lts-6 (lts-6.31), lts-7 (lts-7.20), latest in hackage
aeson ==0.9.0.1 || ==0.11.3.0 || ==1.1.1.0

pvp rule aggregates versions into a range that should be compatible with the obtained versions in terms of PVP (Package Versioning Policy.)

$ staversion --aggregate pvp -r lts-5 -r lts-6 -r lts-7 -H aeson
------ lts-5 (lts-5.18), lts-6 (lts-6.31), lts-7 (lts-7.22), latest in hackage
aeson >=0.9.0.1 && <0.10 || >=0.11.3 && <0.12 || ==1.2.*

You can use --aggregate option with querying .cabal files.

$ staversion --aggregate pvp -r lts-6 -r lts-7 -r lts-8 staversion.cabal 
------ lts-6 (lts-6.31), lts-7 (lts-7.22), lts-8 (lts-8.13)
-- staversion.cabal - library
base >=4.8.2 && <4.10,
unordered-containers >=0.2.8 && <0.3,
aeson >=0.11.3 && <0.12 || >=1.0.2.1 && <1.1,
text >=1.2.2.1 && <1.3,
bytestring >=0.10.6 && <0.11,
yaml >=0.8.22 && <0.9,
filepath ==1.4.*,
directory >=1.2.2 && <1.4,
optparse-applicative >=0.12.1 && <0.13 || >=0.13.2 && <0.14,
containers >=0.5.6.2 && <0.6,
http-client >=0.4.31.2 && <0.5 || >=0.5.6.1 && <0.6,

(snip)

TODO

  • Cache build plans in some local storage (SQLite?)

Author

Toshio Ito

Changes

Revision history for staversion

0.2.1.0 -- 2017-06-18

  • Add --format-version option.
  • --format-version cabal-caret option uses the caret operator (^>=) if possible. (#2)

0.2.0.0 -- 2017-05-14

  • [breaking change] pvp aggregator now does "trailing-zero normalization". For example, it now assumes versions "2.2" and "2.2.0.0" are practically the same (#2).
  • Add pvp-major aggregator, which is just an alias for pvp aggregator.
  • Add pvp-minor aggregator, which is similar to pvp-major but it uses minor versions for upper bounds (#2).

0.1.4.0 -- 2017-04-08

  • Add --aggregate option, which aggregates versions in different LTS resolvers. There are or and pvp aggregators.
  • Bug fix: when it fails to load a given .cabal file, now it continues processing the next target.

0.1.3.2 -- 2017-01-05

  • Fix dependency lower bound for base. It was >=4.6, but now it's >=4.8 due to dependency on megaparsec.

0.1.3.1 -- 2017-01-03

  • Now staversion can parse the "curly brace" format of .cabal files (to some extent.)
  • Confirmed test with aeson-1.1.0.0.

0.1.3.0 -- 2016-12-29

  • Now staversion shows the exact resolver for a partial resolver (e.g. "lts-4" -> "lts-4.2")
  • Now staversion reads .cabal files, and uses their build-depends fields as query.
  • Fix minor error in ordering the result.

0.1.2.0 -- 2016-11-10

  • New option --hackage, which searches hackage for the latest version number.

0.1.1.0 -- 2016-11-03

  • Now staversion fetches build plan YAML files over network, if necessary.
  • Now staversion disambiguates partial resolvers (e.g. "lts-2") into exact resolvers (e.g. "lts-2.22").
  • New option --no-network, which forbids staversion to access network.

0.1.0.0 -- 2016-10-16

  • First version. Released on an unsuspecting world.
comments powered byDisqus