lib: cli/ui/web: clarify version string code

version -> packageversion
versiondescription -> versionStringFor
This commit is contained in:
Simon Michael 2021-08-05 22:39:09 -10:00
parent 53f02c7b3d
commit 49ff039312
4 changed files with 61 additions and 37 deletions

View File

@ -9,17 +9,23 @@ import Data.Default
import Data.List (intercalate) import Data.List (intercalate)
import System.Environment import System.Environment
import Hledger.Cli hiding (progname,version,prognameandversion) import Hledger.Cli hiding (packageversion, progname, prognameandversion)
import Hledger.UI.Theme (themeNames) import Hledger.UI.Theme (themeNames)
progname, version, prognameandversion :: String -- cf Hledger.Cli.Version
progname = "hledger-ui"
packageversion :: String
#ifdef VERSION #ifdef VERSION
version = VERSION packageversion = VERSION
#else #else
version = "" packageversion = ""
#endif #endif
prognameandversion = versiondescription progname
progname :: String
progname = "hledger-ui"
prognameandversion :: String
prognameandversion = versionStringFor progname
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 @@ import Yesod.Default.Handlers (getFaviconR, getRobotsR)
import Hledger import Hledger
import Hledger.Web.Import import Hledger.Web.Import
import Hledger.Web.WebOptions (version) import Hledger.Web.WebOptions (packageversion)
import Hledger.Web.Widget.Common (journalFile404) import Hledger.Web.Widget.Common (journalFile404)
getRootR :: Handler Html getRootR :: Handler Html
@ -60,7 +60,7 @@ getVersionR = do
VD{caps} <- getViewData VD{caps} <- getViewData
when (CapView `notElem` caps) (permissionDenied "Missing the 'view' capability") when (CapView `notElem` caps) (permissionDenied "Missing the 'view' capability")
selectRep $ do selectRep $ do
provideJson $ version provideJson $ packageversion
getAccountnamesR :: Handler TypedContent getAccountnamesR :: Handler TypedContent
getAccountnamesR = do getAccountnamesR = do

View File

@ -16,18 +16,24 @@ import System.Environment (getArgs)
import Network.Wai as WAI import Network.Wai as WAI
import Network.Wai.Middleware.Cors import Network.Wai.Middleware.Cors
import Hledger.Cli hiding (progname, version) import Hledger.Cli hiding (packageversion, progname, prognameandversion)
import Hledger.Web.Settings (defhost, defport, defbaseurl) import Hledger.Web.Settings (defhost, defport, defbaseurl)
progname, version :: String -- cf Hledger.Cli.Version
progname = "hledger-web"
packageversion :: String
#ifdef VERSION #ifdef VERSION
version = VERSION packageversion = VERSION
#else #else
version = "" packageversion = ""
#endif #endif
progname :: String
progname = "hledger-web"
prognameandversion :: String prognameandversion :: String
prognameandversion = versiondescription progname prognameandversion = versionStringFor progname
webflags :: [Flag RawOpts] webflags :: [Flag RawOpts]
webflags = webflags =

View File

@ -5,11 +5,10 @@ Version number-related utilities. See also the Makefile.
-} -}
module Hledger.Cli.Version ( module Hledger.Cli.Version (
packageversion,
progname, progname,
version,
prognameandversion, prognameandversion,
versiondescription, versionStringFor,
-- binaryfilename,
) )
where where
@ -17,23 +16,17 @@ import GitHash (giDescribe, tGitInfoCwdTry)
import System.Info (os, arch) import System.Info (os, arch)
import Hledger.Utils import Hledger.Utils
-- | This package's version, passed in as VERSION build variable, or a generic description.
-- package name and version from the cabal file packageversion :: String
progname :: String
progname = "hledger"
version :: String
#ifdef VERSION #ifdef VERSION
version = VERSION packageversion = VERSION
#else #else
version = "dev build" packageversion = "dev build"
#endif #endif
prognameandversion :: String -- | A period and the patch level (number of patches added since the package version),
prognameandversion = versiondescription progname -- passed in as PATCHLEVEL build variable, or the empty string.
-- If PATCHLEVEL is defined it must be a number, or this will fail.
-- developer build version strings include PATCHLEVEL (number of
-- patches since the last tag). If defined, it must be a number.
patchlevel :: String patchlevel :: String
#ifdef PATCHLEVEL #ifdef PATCHLEVEL
patchlevel = "." ++ show (PATCHLEVEL :: Int) patchlevel = "." ++ show (PATCHLEVEL :: Int)
@ -41,9 +34,12 @@ patchlevel = "." ++ show (PATCHLEVEL :: Int)
patchlevel = "" patchlevel = ""
#endif #endif
-- the package version plus patchlevel if specified -- | The version and patchlevel passed in as build variables, combined and prettified.
-- This will raise an error if VERSION is has <1 or >3 components,
-- or if PATCHLEVEL is defined but not a number.
-- Used as a fallback if git describe is unavailable.
buildversion :: String buildversion :: String
buildversion = prettify . splitAtElement '.' $ version ++ patchlevel buildversion = prettify . splitAtElement '.' $ packageversion ++ patchlevel
where where
prettify (major:minor:bugfix:patches:[]) = prettify (major:minor:bugfix:patches:[]) =
major ++ "." ++ minor ++ bugfix' ++ patches' major ++ "." ++ minor ++ bugfix' ++ patches'
@ -56,19 +52,35 @@ buildversion = prettify . splitAtElement '.' $ version ++ patchlevel
prettify [] = error' "VERSION is empty, please fix" -- PARTIAL: prettify [] = error' "VERSION is empty, please fix" -- PARTIAL:
prettify _ = error' "VERSION has too many components, please fix" prettify _ = error' "VERSION has too many components, please fix"
-- | A string representing the version description of the current package -- | The name of this package's main executable.
versiondescription :: String -> String progname :: String
versiondescription progname = concat [ progname = "hledger"
-- | The program name and the best version information we can obtain
-- from git describe or build variables.
prognameandversion :: String
prognameandversion = versionStringFor progname
-- | Given a program name, make a version string consisting of:
--
-- * the program name
-- * the output of "git describe" in the current repo at build time
-- (last tag, commit count since then, HEAD's git hash);
-- or if that fails, buildversion
-- * the platform (OS) name
-- * the processor architecture name.
--
versionStringFor :: String -> String
versionStringFor progname = concat [
progname progname
, " " , " "
, either (const buildversion) giDescribe gi , either (const buildversion) giDescribe $$tGitInfoCwdTry
, ", " , ", "
, os' , os'
, "-" , "-"
, arch , arch
] ]
where where
gi = $$tGitInfoCwdTry
os' | os == "darwin" = "mac" os' | os == "darwin" = "mac"
| os == "mingw32" = "windows" | os == "mingw32" = "windows"
| otherwise = os | otherwise = os