hledger-1.40: Command-line interface for the hledger accounting system
Safe HaskellNone
LanguageHaskell2010

Hledger.Cli.Version

Synopsis

Documentation

packageversion :: PackageVersion Source #

The "1.40" string defined with -D in this package's package.yaml/.cabal file (by Shake setversion), if any. Normally a dotted number string with 1-3 components.

packagemajorversion :: PackageVersion Source #

Just the first 1-2 components of packageversion.

versionStringWith :: Either String GitInfo -> Bool -> ProgramName -> PackageVersion -> VersionString Source #

Given possible git state info from the build directory (or a git error, which is ignored), and the ghcdebug build flag, executable name and package version for the package being built, make the best version string we can. Here is the logic:

  • Program name, OS and architecture are always shown.
  • The package version is always shown.
  • If there is git info at build time, the latest commit hash and commit date are shown, and (TODO, requires githash to use -uno for giDirty): if the working copy has uncommitted changes a + sign is appended.
  • (TODO, requires adding --match support to githash: If there are tags matching THISPKG-[0-9]*, the latest one is used to calculate patch level (number of commits since tag), and if non-zero, it and the branch name are shown.)
  • If the ghcdebug build flag was enabled for the package being built, and for hledger-lib (both are needed), "ghc-debug support" is shown.

Some example outputs:

  • A homebrew binary, not built in git repo: hledger-ui 1.24, mac-aarch64
  • A CI release build, built in git repo at release tag: hledger-ui 1.24.1-g455b35293-20211210, mac-x86_64
  • (TODO) A dev build, built in git repo: hledger-ui 1.24.1+1-g4abd8ef10-20211210 (1.24-branch), mac-x86_64

This function requires git log to show the default (rfc2822-style) date format, so that must not be overridden by a log.date git config variable.

The GitInfo if any, fetched by template haskell, is passed down from a top-level module, reducing wasteful recompilation. The status of the ghcdebug build flag is also passed down, since it is specific to each hledger package.

This is used indirectly by at least hledger, hledger-ui, and hledger-web, so output should be suitable for all of those.