cli,ui,web: Display full git description in --version report if able.

Remove unused prognameanddetailedversion code branches.
This commit is contained in:
Stephen Morgan 2021-04-26 14:00:48 +10:00 committed by Simon Michael
parent 1e2ff1315b
commit bf063e4538
6 changed files with 52 additions and 37 deletions

View File

@ -13,15 +13,14 @@ import System.Environment
import Hledger.Cli hiding (progname,version,prognameandversion) import Hledger.Cli hiding (progname,version,prognameandversion)
import Hledger.UI.Theme (themeNames) import Hledger.UI.Theme (themeNames)
progname, version :: String progname, version, prognameandversion :: String
progname = "hledger-ui" progname = "hledger-ui"
#ifdef VERSION #ifdef VERSION
version = VERSION version = VERSION
#else #else
version = "" version = ""
#endif #endif
prognameandversion :: String prognameandversion = versiondescription progname
prognameandversion = progname ++ " " ++ version :: String
uiflags = [ uiflags = [
-- flagNone ["debug-ui"] (setboolopt "rules-file") "run with no terminal output, showing console" -- flagNone ["debug-ui"] (setboolopt "rules-file") "run with no terminal output, showing console"

View File

@ -27,7 +27,7 @@ version = VERSION
version = "" version = ""
#endif #endif
prognameandversion :: String prognameandversion :: String
prognameandversion = progname ++ " " ++ version :: String prognameandversion = versiondescription progname
webflags :: [Flag RawOpts] webflags :: [Flag RawOpts]
webflags = webflags =

View File

@ -138,7 +138,6 @@ main = do
isExternalCommand = not (null cmd) && cmd `elem` addons -- probably isExternalCommand = not (null cmd) && cmd `elem` addons -- probably
isBadCommand = not (null rawcmd) && null cmd isBadCommand = not (null rawcmd) && null cmd
hasVersion = ("--version" `elem`) hasVersion = ("--version" `elem`)
hasDetailedVersion = ("--version+" `elem`)
printUsage = putStr $ showModeUsage $ mainmode addons printUsage = putStr $ showModeUsage $ mainmode addons
badCommandError = error' ("command "++rawcmd++" is not recognized, run with no command to see a list") >> exitFailure -- PARTIAL: badCommandError = error' ("command "++rawcmd++" is not recognized, run with no command to see a list") >> exitFailure -- PARTIAL:
hasHelpFlag args = any (`elem` args) ["-h","--help"] hasHelpFlag args = any (`elem` args) ["-h","--help"]
@ -170,9 +169,6 @@ main = do
| not (isExternalCommand || hasHelpFlag args || hasInfoFlag args || hasManFlag args) | not (isExternalCommand || hasHelpFlag args || hasInfoFlag args || hasManFlag args)
&& (hasVersion args) -- || (hasVersion argsaftercmd && isInternalCommand)) && (hasVersion args) -- || (hasVersion argsaftercmd && isInternalCommand))
= putStrLn prognameandversion = putStrLn prognameandversion
| not (isExternalCommand || hasHelpFlag args || hasInfoFlag args || hasManFlag args)
&& (hasDetailedVersion argsbeforecmd) -- || (hasDetailedVersion argsaftercmd && isInternalCommand))
= putStrLn prognameanddetailedversion
-- \| (null externalcmd) && "binary-filename" `inRawOpts` rawopts = putStrLn $ binaryfilename progname -- \| (null externalcmd) && "binary-filename" `inRawOpts` rawopts = putStrLn $ binaryfilename progname
-- \| "--browse-args" `elem` args = System.Console.CmdArgs.Helper.execute "cmdargs-browser" mainmode' args >>= (putStr . show) -- \| "--browse-args" `elem` args = System.Console.CmdArgs.Helper.execute "cmdargs-browser" mainmode' args >>= (putStr . show)
| isNullCommand = dbgIO "" "no command, showing commands list" >> printCommandsList addons | isNullCommand = dbgIO "" "no command, showing commands list" >> printCommandsList addons

View File

@ -1,4 +1,5 @@
{-# LANGUAGE CPP, TemplateHaskell #-} {-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
{- {-
Version number-related utilities. See also the Makefile. Version number-related utilities. See also the Makefile.
-} -}
@ -7,26 +8,29 @@ module Hledger.Cli.Version (
progname, progname,
version, version,
prognameandversion, prognameandversion,
prognameanddetailedversion, versiondescription,
binaryfilename binaryfilename,
) )
where where
import System.Info (os, arch)
import Text.Printf
#if MIN_VERSION_githash(0,1,4)
import GitHash (giDescribe, tGitInfoCwdTry)
#else
import GitHash (giHash, tGitInfoCwdTry)
#endif
import System.Info (os, arch)
import Hledger.Utils import Hledger.Utils
-- package name and version from the cabal file -- package name and version from the cabal file
progname, version, prognameandversion, prognameanddetailedversion :: String progname, version, prognameandversion :: String
progname = "hledger" progname = "hledger"
#ifdef VERSION #ifdef VERSION
version = VERSION version = VERSION
#else #else
version = "dev build" version = "dev build"
#endif #endif
prognameandversion = progname ++ " " ++ version prognameandversion = versiondescription progname
prognameanddetailedversion = printf "%s %s" progname version
-- developer build version strings include PATCHLEVEL (number of -- developer build version strings include PATCHLEVEL (number of
-- patches since the last tag). If defined, it must be a number. -- patches since the last tag). If defined, it must be a number.
@ -39,29 +43,40 @@ patchlevel = ""
-- the package version plus patchlevel if specified -- the package version plus patchlevel if specified
buildversion :: String buildversion :: String
buildversion = version ++ patchlevel buildversion = prettify . splitAtElement '.' $ version ++ patchlevel
where
prettify (major:minor:bugfix:patches:[]) =
major ++ "." ++ minor ++ bugfix' ++ patches'
where
bugfix' = if bugfix == "0" then "" else '.' : bugfix
patches' = if patches == "0" then "" else '+' : patches
prettify (major:minor:bugfix:[]) = prettify [major,minor,bugfix,"0"]
prettify (major:minor:[]) = prettify [major,minor,"0","0"]
prettify (major:[]) = prettify [major,"0","0","0"]
prettify [] = error' "VERSION is empty, please fix" -- PARTIAL:
prettify _ = error' "VERSION has too many components, please fix"
-- | A string representing the version description of the current package
versiondescription :: String -> String
versiondescription progname = concat
#if MIN_VERSION_githash(0,1,4)
[progname, " ", either (const buildversion) giDescribe gi, ", ", os', "-", arch]
#else
[progname, " ", buildversion, either (const "") (\x -> ", git revision " ++ giHash x) gi, ", ", os', "-", arch]
#endif
where
gi = $$tGitInfoCwdTry
os' | os == "darwin" = "mac"
| os == "mingw32" = "windows"
| otherwise = os
-- | Given a program name, return a precise platform-specific executable -- | Given a program name, return a precise platform-specific executable
-- name suitable for naming downloadable binaries. Can raise an error if -- name suitable for naming downloadable binaries. Can raise an error if
-- the version and patch level was not defined correctly at build time. -- the version and patch level was not defined correctly at build time.
binaryfilename :: String -> String binaryfilename :: String -> String
binaryfilename progname = prettify $ splitAtElement '.' buildversion binaryfilename progname = concat
where [progname, "-", buildversion, "-", os', "-", arch, suffix]
prettify (major:minor:bugfix:patches:[]) = where
printf "%s-%s.%s%s%s-%s-%s%s" progname major minor bugfix' patches' os' arch suffix (os',suffix) | os == "darwin" = ("mac","" :: String)
where | os == "mingw32" = ("windows",".exe")
bugfix' | otherwise = (os,"")
| bugfix `elem` ["0"{-,"98","99"-}] = ""
| otherwise = '.' : bugfix
patches'
| patches/="0" = '+' : patches
| otherwise = ""
(os',suffix)
| os == "darwin" = ("mac","" :: String)
| os == "mingw32" = ("windows",".exe")
| otherwise = (os,"")
prettify (major:minor:bugfix:[]) = prettify [major,minor,bugfix,"0"]
prettify (major:minor:[]) = prettify [major,minor,"0","0"]
prettify (major:[]) = prettify [major,"0","0","0"]
prettify [] = error' "VERSION is empty, please fix" -- PARTIAL:
prettify _ = error' "VERSION has too many components, please fix"

View File

@ -150,6 +150,7 @@ library
, directory , directory
, extra >=1.6.3 , extra >=1.6.3
, filepath , filepath
, githash >=0.1.2
, hashable >=1.2.4 , hashable >=1.2.4
, haskeline >=0.6 , haskeline >=0.6
, hledger-lib >=1.21.99 && <1.22 , hledger-lib >=1.21.99 && <1.22
@ -200,6 +201,7 @@ executable hledger
, directory , directory
, extra >=1.6.3 , extra >=1.6.3
, filepath , filepath
, githash >=0.1.2
, haskeline >=0.6 , haskeline >=0.6
, hledger , hledger
, hledger-lib >=1.21.99 && <1.22 , hledger-lib >=1.21.99 && <1.22
@ -250,6 +252,7 @@ test-suite unittest
, directory , directory
, extra >=1.6.3 , extra >=1.6.3
, filepath , filepath
, githash >=0.1.2
, haskeline >=0.6 , haskeline >=0.6
, hledger , hledger
, hledger-lib >=1.21.99 && <1.22 , hledger-lib >=1.21.99 && <1.22
@ -298,6 +301,7 @@ benchmark bench
, directory , directory
, extra >=1.6.3 , extra >=1.6.3
, filepath , filepath
, githash >=0.1.2
, haskeline >=0.6 , haskeline >=0.6
, hledger , hledger
, hledger-lib >=1.21.99 && <1.22 , hledger-lib >=1.21.99 && <1.22

View File

@ -108,6 +108,7 @@ dependencies:
- directory - directory
- extra >=1.6.3 - extra >=1.6.3
- filepath - filepath
- githash >=0.1.2
- haskeline >=0.6 - haskeline >=0.6
- megaparsec >=7.0.0 && <9.1 - megaparsec >=7.0.0 && <9.1
- mtl >=2.2.1 - mtl >=2.2.1