Development.GitRev

gitrev-1.2.0: Compile git revision info into Haskell projects

Copyright | (c) 2015 Adam C. Foltzer
License | BSD3
Maintainer | acfoltzer@galois.com
Stability | provisional
Portability | portable
Safe Haskell | None
Language | Haskell2010

Development.GitRev

Description

Some handy Template Haskell splices for including the current git hash and branch in the code of your project. Useful for including in panic messages, `--version` output, or diagnostic info for more informative bug reports.

    {-# LANGUAGE TemplateHaskell #-}
    import Development.GitRev

    panic :: String -> a
    panic msg = error panicMsg
      where panicMsg =
              concat [ "[panic ", $(gitBranch), "@", $(gitHash)
                     , " (", $(gitCommitDate), ")"
                     , " (", $(gitCommitCount), " commits in HEAD)"
                     , dirty, "] ", msg ]
            dirty | $(gitDirty) = " (uncommitted files present)"
                  | otherwise   = ""

    main = panic "oh no!"

    % cabal exec runhaskell Example.hs
    Example.hs: [panic master@2ae047ba5e4a6f0f3e705a43615363ac006099c1 (Mon Jan 11 11:50:59 2016 -0800) (14 commits in HEAD) (uncommitted files present)] oh no!

Synopsis

- gitHash :: ExpQ
- gitBranch :: ExpQ
- gitDirty :: ExpQ
- gitCommitCount :: ExpQ
- gitCommitDate :: ExpQ

# Documentation

gitHash :: ExpQ #

Return the hash of the current git commit, or `UNKNOWN` if not in a git repository

gitBranch :: ExpQ #

Return the branch (or tag) name of the current git commit, or `UNKNOWN` if not in a git repository. For detached heads, this will just be HEAD

gitDirty :: ExpQ #

Return `True` if there are non-committed files present in the repository

gitCommitCount :: ExpQ #

Return the number of commits in the current head

gitCommitDate :: ExpQ #

Return the commit date of the current head