on master help sign in
Merge pull request #743 from david-christiansen/show-git-in-version-2

Show Git revision IDs in pre-release versions

commitc68b37656c3dfa80ae78d730ef995fafa8c766fe authorEdwin Brady <edwin.brady@gmail.com> dateSun 22 Dec 2013, 04:37 (13 years ago) parent5eaf1f5e626474
3 files changed+37−1
Setup.hs+28 idris.cabal+7 src/Idris/REPL.hs+2−1
Setup.hs+28
@@ -1,12 +1,15 @@
11{-# LANGUAGE CPP #-}
22import Control.Monad
33import Data.IORef
4+import Control.Exception (SomeException, catch)
45
56import Distribution.Simple
7+import Distribution.Simple.BuildPaths (autogenModulesDir)
68import Distribution.Simple.InstallDirs as I
79import Distribution.Simple.LocalBuildInfo as L
810import qualified Distribution.Simple.Setup as S
911import qualified Distribution.Simple.Program as P
12+import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
1013import Distribution.PackageDescription
1114import Distribution.Text
1215
@@ -60,6 +63,13 @@ usesGMP flags =
6063 Just False -> False
6164 Nothing -> True
6265
66+isRelease :: S.ConfigFlags -> Bool
67+isRelease flags =
68+ case lookup (FlagName "release") (S.configConfigurationsFlags flags) of
69+ Just True -> True
70+ Just False -> False
71+ Nothing -> False
72+
6373-- -----------------------------------------------------------------------------
6474-- Clean
6575
@@ -82,6 +92,7 @@ idrisClean _ flags _ _ = do
8292
8393idrisConfigure _ flags _ local = do
8494 configureRTS
95+ generateVersionModule
8596 where
8697 verbosity = S.fromFlag $ S.configVerbosity flags
8798 version = pkgVersion . package $ localPkgDescr local
@@ -92,6 +103,23 @@ idrisConfigure _ flags _ local = do
92103 -- the file after configure.
93104 configureRTS = make verbosity ["-C", "rts", "clean"]
94105
106+ -- Put the Git hash into a module for use in the program
107+ -- For release builds, just put the empty string in the module
108+ generateVersionModule = do
109+ gitHash <- catch (readProcess "git" ["rev-parse", "--short", "HEAD"] "")
110+ (\e -> let e' = (e :: SomeException) in return "PRE")
111+ let hash = takeWhile (/= '\n') gitHash
112+ let versionModulePath = autogenModulesDir local </> "Version_idris" Px.<.> "hs"
113+ createDirectoryIfMissingVerbose verbosity True (autogenModulesDir local)
114+ rewriteFile versionModulePath (versionModuleContents hash)
115+
116+ versionModuleContents h = "module Version_idris where\n\n" ++
117+ "gitHash :: String\n" ++
118+ if isRelease (configFlags local)
119+ then "gitHash = \"\"\n"
120+ else "gitHash = \"-git:" ++ h ++ "\"\n"
121+
122+
95123-- -----------------------------------------------------------------------------
96124-- Build
97125
idris.cabal+7
@@ -308,6 +308,13 @@ Flag GMP
308308 Default: False
309309 manual: True
310310
311+-- This flag determines whether to show Git hashes in version strings
312+-- Defaults to True because Hackage is a source release
313+Flag release
314+ Description: This is an official release
315+ Default: False
316+ manual: True
317+
311318Executable idris
312319 Main-is: Main.hs
313320 hs-source-dirs: src
src/Idris/REPL.hs+2−1
@@ -26,6 +26,7 @@ import Idris.CaseSplit
2626import Idris.DeepSeq
2727
2828import Paths_idris
29+import Version_idris (gitHash)
2930import Util.System
3031import Util.DynamicLinker
3132import Util.Net (listenOnLocalhost)
@@ -1326,7 +1327,7 @@ getColour _ = Nothing
13261327opt :: (Opt -> Maybe a) -> [Opt] -> [a]
13271328opt = mapMaybe
13281329
1329−ver = showVersion version
1330+ver = showVersion version ++ gitHash
13301331
13311332banner = " ____ __ _ \n" ++
13321333 " / _/___/ /____(_)____ \n" ++