Skip to content

Commit

Permalink
record Git revision in devel builds
Browse files Browse the repository at this point in the history
`cabal --version` in such builds will include the Git commit and
branch (if not `master`).
  • Loading branch information
geekosaur committed Nov 9, 2024
1 parent 9f62de9 commit 7f77174
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Cabal/src/Distribution/Simple/Utils.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
#ifdef GIT_REV
{-# LANGUAGE TemplateHaskell #-}
#endif

-----------------------------------------------------------------------------

Expand Down
11 changes: 11 additions & 0 deletions cabal-install/cabal-install.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ Flag lukko
default: True
manual: True

flag git-rev
description: include Git revision hash in version
default: False
manual: True

common warnings
ghc-options:
-Wall
Expand Down Expand Up @@ -270,6 +275,9 @@ library
if impl(ghc >=8.2)
build-depends: process >= 1.6.15.0

if flag(git-rev)
build-depends: githash ^>= 0.1.7.0
cpp-options: -DGIT_REV

executable cabal
import: warnings, base-dep
Expand All @@ -283,6 +291,9 @@ executable cabal
if os(aix)
extra-libraries: bsd

if flag(git-rev)
ghc-options: -DGIT_REV

build-depends:
cabal-install

Expand Down
3 changes: 3 additions & 0 deletions cabal-install/src/Distribution/Client/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ import Distribution.Client.Utils
)
import Distribution.Client.Version
( cabalInstallVersion
, cabalInstallGitInfo
)

import Distribution.Package (packageId)
Expand Down Expand Up @@ -413,6 +414,8 @@ mainWorker args = do
putStrLn $
"cabal-install version "
++ display cabalInstallVersion
++ " "
++ cabalInstallGitInfo
++ "\ncompiled using version "
++ display cabalVersion
++ " of the Cabal library "
Expand Down
38 changes: 38 additions & 0 deletions cabal-install/src/Distribution/Client/Version.hs
Original file line number Diff line number Diff line change
@@ -1,13 +1,51 @@
{-# LANGUAGE CPP #-}
#ifdef GIT_REV
{-# LANGUAGE TemplateHaskell #-}
#endif

-- | Provides the version number of @cabal-install@.
module Distribution.Client.Version
( cabalInstallVersion
, cabalInstallGitInfo
) where

import Distribution.Version

import qualified Paths_cabal_install as PackageInfo

#ifdef GIT_REV
import Data.Either (isLeft)
import GitHash
( giHash
, giBranch
, giCommitDate
, tGitInfoCwdTry
)
#endif

-- |
-- This value determines the output of `cabal-install --version`.
cabalInstallVersion :: Version
cabalInstallVersion = mkVersion' PackageInfo.version

-- |
-- `cabal-install` Git information. Only filled in if built in a Git tree in
-- developmnent mode and Template Haskell is available.
cabalInstallGitInfo :: String
#ifdef GIT_REV
cabalInstallGitInfo = concat [ "(commit "
, giHash'
, branchInfo
, ", "
, either (const "") giCommitDate gi'
, ")"
]
where
gi' = $$tGitInfoCwdTry
giHash' = take 7 . either (const "") giHash $ gi'
branchInfo | isLeft gi' = ""
| either id giBranch gi' == "master" = ""
| otherwise = " on " <> either id giBranch gi'
#else
cabalInstallGitInfo = ""
#endif
5 changes: 5 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,8 @@ import: project-cabal/pkgs.config
import: project-cabal/constraints.config

tests: True

-- if you are developing on a system without TH, use a `cabal.project.local`
-- to disable this
package cabal-install
flags: +git-rev
7 changes: 7 additions & 0 deletions cabal.release.project
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,10 @@ constraints:
hashable -arch-native

index-state: hackage.haskell.org 2024-09-06T14:16:40Z

-- never include this or its TH dependency in a release!
package Cabal
flags: -git-rev

package cabal-install
flags: -git-rev
5 changes: 5 additions & 0 deletions cabal.validate.project
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,8 @@ program-options
-- as such we cannot enable "-march=native".
constraints:
hashable -arch-native

-- if you are developing on a system without TH, use a `cabal.validate.project.local`
-- to disable this
package cabal-install
flags: +git-rev

0 comments on commit 7f77174

Please sign in to comment.