| Copyright | (c) 2018 Michael Snoyman 2015 Adam C. Foltzer | 
|---|---|
| License | BSD3 | 
| Maintainer | michael@snoyman.com | 
| Stability | provisional | 
| Portability | portable | 
| Safe Haskell | None | 
| Language | Haskell2010 | 
GitHash
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 GitHash
panic :: String -> a
panic msg = error panicMsg
  where panicMsg =
          concat [ "[panic ", giBranch gi, "@", giHash gi
                 , " (", giCommitDate gi, ")"
                 , " (", show (giCommitCount gi), " commits in HEAD)"
                 , dirty, "] ", msg ]
        dirty | giDirty gi = " (uncommitted files present)"
              | otherwise   = ""
        gi = $$tGitInfoCwd
main = panic "oh no!"% stack runghc Example.hs Example.hs: [panic master@2ae047ba5e4a6f0f3e705a43615363ac006099c1 (Mon Jan 11 11:50:59 2016 -0800) (14 commits in HEAD) (uncommitted files present)] oh no!
WARNING: None of this will work in a git repository without any commits.
Since: 0.1.0.0
Synopsis
- data GitInfo
- data GitHashException
- giHash :: GitInfo -> String
- giBranch :: GitInfo -> String
- giDirty :: GitInfo -> Bool
- giCommitDate :: GitInfo -> String
- giCommitCount :: GitInfo -> Int
- giCommitMessage :: GitInfo -> String
- giDescribe :: GitInfo -> String
- giTag :: GitInfo -> String
- giFiles :: GitInfo -> [FilePath]
- getGitInfo :: FilePath -> IO (Either GitHashException GitInfo)
- getGitRoot :: FilePath -> IO (Either GitHashException FilePath)
- tGitInfo :: FilePath -> SpliceQ GitInfo
- tGitInfoCwd :: SpliceQ GitInfo
- tGitInfoTry :: FilePath -> SpliceQ (Either String GitInfo)
- tGitInfoCwdTry :: SpliceQ (Either String GitInfo)
Types
Various pieces of information about a Git repository.
Since: 0.1.0.0
Instances
data GitHashException #
Exceptions which can occur when using this library's functions.
Since: 0.1.0.0
Constructors
Instances
| Exception GitHashException # | |
| Defined in GitHash Methods toException :: GitHashException -> SomeException # fromException :: SomeException -> Maybe GitHashException # | |
| Show GitHashException # | |
| Defined in GitHash Methods showsPrec :: Int -> GitHashException -> ShowS # show :: GitHashException -> String # showList :: [GitHashException] -> ShowS # | |
| Eq GitHashException # | |
| Defined in GitHash Methods (==) :: GitHashException -> GitHashException -> Bool # (/=) :: GitHashException -> GitHashException -> Bool # | |
Getters
giCommitDate :: GitInfo -> String #
giCommitCount :: GitInfo -> Int #
giCommitMessage :: GitInfo -> String #
The message of the most recent commit.
Since: 0.1.1.0
giDescribe :: GitInfo -> String #
The output of git describe --always for the most recent commit.
Since: 0.1.4.0
The output of git describe --always --tags for the most recent commit.
Since: 0.1.5.0
giFiles :: GitInfo -> [FilePath] #
The files used to determine whether recompilation is necessary in splices.
Since: 0.1.7.0
Creators
getGitInfo :: FilePath -> IO (Either GitHashException GitInfo) #
Get the GitInfo for the given root directory. Root directory
 should be the directory containing the .git directory.
Since: 0.1.0.0
getGitRoot :: FilePath -> IO (Either GitHashException FilePath) #
Get the root directory of the Git repo containing the given file path.
Since: 0.1.0.0
Template Haskell
tGitInfo :: FilePath -> SpliceQ GitInfo #
Load up the GitInfo value at compile time for the given
 directory. Compilation fails if no info is available.
Since: 0.1.0.0
tGitInfoCwd :: SpliceQ GitInfo #
Load up the GitInfo value at compile time for the current
 working directory.
Since: 0.1.0.0