{-# LANGUAGE TypeApplications #-}
{-# OPTIONS_HADDOCK hide #-}
-- |
-- Copyright: 2020 Input Output (Hong Kong) Ltd., 2021-2022 Input Output Global Inc. (IOG), 2023-2025 Intersect
-- License: Apache-2.0
module System.Git.TH
( gitRevParseHEAD
) where
import Prelude
import Control.Exception
( SomeException, try )
import Language.Haskell.TH
( Exp (..), Lit (..), Q, runIO )
import System.Environment
( lookupEnv )
import System.Exit
( ExitCode (..) )
import System.Process
( readProcessWithExitCode )
gitRevParseHEAD :: Q Exp
gitRevParseHEAD =
LitE . StringL <$> runIO findGitRev
where
findGitRev :: IO String
findGitRev = do
envRev <- lookupEnv "GITREV"
maybe runGitRevParse pure envRev
runGitRevParse :: IO String
runGitRevParse = do
result <- try @SomeException $
readProcessWithExitCode "git" ["rev-parse", "--verify", "HEAD"] ""
case result of
Right (ExitSuccess, revision, _) -> pure revision
_ -> pure "unknown revision"