githash-0.1.7.0: Compile git revision info into Haskell projects
Copyright(c) 2018 Michael Snoyman 2015 Adam C. Foltzer
LicenseBSD3
Maintainermichael@snoyman.com
Stabilityprovisional
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

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

Types

data GitInfo #

Various pieces of information about a Git repository.

Since: 0.1.0.0

Instances

Instances details
Show GitInfo # 
Instance details

Defined in GitHash

Methods

showsPrec :: Int -> GitInfo -> ShowS

show :: GitInfo -> String

showList :: [GitInfo] -> ShowS

Lift GitInfo # 
Instance details

Defined in GitHash

Methods

lift :: Quote m => GitInfo -> m Exp

liftTyped :: forall (m :: Type -> Type). Quote m => GitInfo -> Code m GitInfo

data GitHashException #

Exceptions which can occur when using this library's functions.

Since: 0.1.0.0

Constructors

GHECouldn'tReadFile !FilePath !IOException 
GHEInvalidCommitCount !FilePath !String 
GHEInvalidGitFile !String 
GHEGitRunFailed !FilePath ![String] !ExitCode !String !String 
GHEGitRunException !FilePath ![String] !IOException 

Instances

Instances details
Exception GitHashException # 
Instance details

Defined in GitHash

Methods

toException :: GitHashException -> SomeException

fromException :: SomeException -> Maybe GitHashException

displayException :: GitHashException -> String

Show GitHashException # 
Instance details

Defined in GitHash

Methods

showsPrec :: Int -> GitHashException -> ShowS

show :: GitHashException -> String

showList :: [GitHashException] -> ShowS

Eq GitHashException # 
Instance details

Defined in GitHash

Getters

giHash :: GitInfo -> String #

The hash of the most recent commit.

Since: 0.1.0.0

giBranch :: GitInfo -> String #

The hash of the most recent commit.

Since: 0.1.0.0

giDirty :: GitInfo -> Bool #

giCommitDate :: GitInfo -> String #

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

giTag :: GitInfo -> String #

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

tGitInfoTry :: FilePath -> SpliceQ (Either String GitInfo) #

Try to load up the GitInfo value at compile time for the given directory.

Since: 0.1.2.0

tGitInfoCwdTry :: SpliceQ (Either String GitInfo) #

Try to load up the GitInfo value at compile time for the current working directory.

Since: 0.1.2.0