on master help sign in
Merge pull request #743 from david-christiansen/show-git-in-version-2
c68b376Edwin Brady
Setup.hs+28
@@ -1,12 +1,15 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2import Control.Monad
2import Control.Monad
3import Data.IORef
3import Data.IORef
4+import Control.Exception (SomeException, catch)
4
5
5import Distribution.Simple
6import Distribution.Simple
7+import Distribution.Simple.BuildPaths (autogenModulesDir)
6import Distribution.Simple.InstallDirs as I
8import Distribution.Simple.InstallDirs as I
7import Distribution.Simple.LocalBuildInfo as L
9import Distribution.Simple.LocalBuildInfo as L
8import qualified Distribution.Simple.Setup as S
10import qualified Distribution.Simple.Setup as S
9import qualified Distribution.Simple.Program as P
11import qualified Distribution.Simple.Program as P
12+import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
10import Distribution.PackageDescription
13import Distribution.PackageDescription
11import Distribution.Text
14import Distribution.Text
12
15
@@ -60,6 +63,13 @@ usesGMP flags =
60 Just False -> False
63 Just False -> False
61 Nothing -> True
64 Nothing -> True
62
65
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+
63-- -----------------------------------------------------------------------------
73-- -----------------------------------------------------------------------------
64-- Clean
74-- Clean
65
75
@@ -82,6 +92,7 @@ idrisClean _ flags _ _ = do
82
92
83idrisConfigure _ flags _ local = do
93idrisConfigure _ flags _ local = do
84 configureRTS
94 configureRTS
95+ generateVersionModule
85 where
96 where
86 verbosity = S.fromFlag $ S.configVerbosity flags
97 verbosity = S.fromFlag $ S.configVerbosity flags
87 version = pkgVersion . package $ localPkgDescr local
98 version = pkgVersion . package $ localPkgDescr local
@@ -92,6 +103,23 @@ idrisConfigure _ flags _ local = do
92 -- the file after configure.
103 -- the file after configure.
93 configureRTS = make verbosity ["-C", "rts", "clean"]
104 configureRTS = make verbosity ["-C", "rts", "clean"]
94
105
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+
95-- -----------------------------------------------------------------------------
123-- -----------------------------------------------------------------------------
96-- Build
124-- Build
97
125
idris.cabal+7
@@ -308,6 +308,13 @@ Flag GMP
308 Default: False
308 Default: False
309 manual: True
309 manual: True
310
310
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+
311Executable idris
318Executable idris
312 Main-is: Main.hs
319 Main-is: Main.hs
313 hs-source-dirs: src
320 hs-source-dirs: src
src/Idris/REPL.hs+2−1
@@ -26,6 +26,7 @@ import Idris.CaseSplit
26import Idris.DeepSeq
26import Idris.DeepSeq
27
27
28import Paths_idris
28import Paths_idris
29+import Version_idris (gitHash)
29import Util.System
30import Util.System
30import Util.DynamicLinker
31import Util.DynamicLinker
31import Util.Net (listenOnLocalhost)
32import Util.Net (listenOnLocalhost)
@@ -1326,7 +1327,7 @@ getColour _ = Nothing
1326opt :: (Opt -> Maybe a) -> [Opt] -> [a]
1327opt :: (Opt -> Maybe a) -> [Opt] -> [a]
1327opt = mapMaybe
1328opt = mapMaybe
1328
1329
1329−ver = showVersion version
1330+ver = showVersion version ++ gitHash
1330
1331
1331banner = " ____ __ _ \n" ++
1332banner = " ____ __ _ \n" ++
1332 " / _/___/ /____(_)____ \n" ++
1333 " / _/___/ /____(_)____ \n" ++