# staversion ![travis status](https://api.travis-ci.org/debug-ito/staversion.png) 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