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 c1ddadb commit c00f498
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 1 deletion.
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 @@ -269,6 +274,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 @@ -282,6 +290,9 @@ executable cabal
if os(aix)
extra-libraries: bsd

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

build-depends:
cabal-install

Expand Down
5 changes: 4 additions & 1 deletion cabal-install/src/Distribution/Client/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,8 @@ import Distribution.Client.Utils
, relaxEncodingErrors
)
import Distribution.Client.Version
( cabalInstallVersion
( cabalInstallGitInfo
, cabalInstallVersion
)

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 @@ -3,3 +3,10 @@ import: project-cabal/pkgs/install.config
import: project-cabal/pkgs/tests.config

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 @@ -7,3 +7,8 @@ tests: True
write-ghc-environment-files: never
program-options
ghc-options: -Werror

-- 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 c00f498

Please sign in to comment.