diff --git a/hledger-ui/Hledger/UI/UIOptions.hs b/hledger-ui/Hledger/UI/UIOptions.hs index 584215737..da0c95e62 100644 --- a/hledger-ui/Hledger/UI/UIOptions.hs +++ b/hledger-ui/Hledger/UI/UIOptions.hs @@ -5,6 +5,7 @@ module Hledger.UI.UIOptions where + import Data.Default import Data.List (intercalate) import System.Environment @@ -25,7 +26,7 @@ progname :: String progname = "hledger-ui" prognameandversion :: String -prognameandversion = versionStringFor progname +prognameandversion = versionStringForProgname progname uiflags = [ -- flagNone ["debug-ui"] (setboolopt "rules-file") "run with no terminal output, showing console" diff --git a/hledger-web/Hledger/Web/WebOptions.hs b/hledger-web/Hledger/Web/WebOptions.hs index 5800b75a3..35a1ac348 100644 --- a/hledger-web/Hledger/Web/WebOptions.hs +++ b/hledger-web/Hledger/Web/WebOptions.hs @@ -31,7 +31,7 @@ progname :: String progname = "hledger-web" prognameandversion :: String -prognameandversion = versionStringFor progname +prognameandversion = versionStringForProgname progname webflags :: [Flag RawOpts] diff --git a/hledger/Hledger/Cli.hs b/hledger/Hledger/Cli.hs index dee9e185c..fea48cfee 100644 --- a/hledger/Hledger/Cli.hs +++ b/hledger/Hledger/Cli.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE TemplateHaskell #-} {-| Hledger.Cli re-exports the options, utilities and commands provided by @@ -14,9 +15,13 @@ module Hledger.Cli ( module Hledger.Cli.Utils, module Hledger.Cli.Version, module Hledger, - module System.Console.CmdArgs.Explicit + module System.Console.CmdArgs.Explicit, + prognameandversion, + versionStringForProgname ) where + +import GitHash (tGitInfoCwdTry) import System.Console.CmdArgs.Explicit hiding (Name) -- don't clash with hledger-ui import Hledger @@ -26,4 +31,9 @@ import Hledger.Cli.DocFiles import Hledger.Cli.Utils import Hledger.Cli.Version +-- | The program name and the best version information we can obtain +-- from git describe or build variables. +prognameandversion = versionStringForProgname progname +versionStringForProgname = versionStringFor $$tGitInfoCwdTry + -- unit tests (tests_Hledger_Cli) are defined in Hledger.Cli.Commands diff --git a/hledger/Hledger/Cli/Commands.hs b/hledger/Hledger/Cli/Commands.hs index bde4113ec..f2ef4d1a9 100644 --- a/hledger/Hledger/Cli/Commands.hs +++ b/hledger/Hledger/Cli/Commands.hs @@ -228,15 +228,15 @@ commandsFromCommandsList s = [w | c:l <- s, c `elem` [' ','+'], let w:_ = words l] knownCommands :: [String] -knownCommands = sort . commandsFromCommandsList $ commandsList prognameandversion [] +knownCommands = sort . commandsFromCommandsList . drop 1 $ commandsList progname [] -- progname will not be seen -- | Print the commands list, modifying the template above based on -- the currently available addons. Missing addons will be removed, and -- extra addons will be added under Misc. -printCommandsList :: [String] -> IO () -printCommandsList addonsFound = +printCommandsList :: String -> [String] -> IO () +printCommandsList progversion addonsFound = putStr . unlines . concatMap adjustline $ - commandsList prognameandversion (map ('+':) unknownCommandsFound) + commandsList progversion (map ('+':) unknownCommandsFound) where commandsFound = map (' ':) builtinCommandNames ++ map ('+':) addonsFound unknownCommandsFound = addonsFound \\ knownCommands diff --git a/hledger/Hledger/Cli/Main.hs b/hledger/Hledger/Cli/Main.hs index 9bcfcc0de..ea9d92207 100644 --- a/hledger/Hledger/Cli/Main.hs +++ b/hledger/Hledger/Cli/Main.hs @@ -169,7 +169,7 @@ main = do = putStrLn prognameandversion -- \| (null externalcmd) && "binary-filename" `inRawOpts` rawopts = putStrLn $ binaryfilename progname -- \| "--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 prognameandversion addons | isBadCommand = badCommandError -- builtin commands @@ -265,4 +265,3 @@ flagstomove = inputflags ++ reportflags ++ helpflags noargflagstomove = concatMap flagNames $ filter ((==FlagNone).flagInfo) flagstomove reqargflagstomove = -- filter (/= "debug") $ concatMap flagNames $ filter ((==FlagReq ).flagInfo) flagstomove - diff --git a/hledger/Hledger/Cli/Version.hs b/hledger/Hledger/Cli/Version.hs index 102a4bd67..56aef68ae 100644 --- a/hledger/Hledger/Cli/Version.hs +++ b/hledger/Hledger/Cli/Version.hs @@ -1,5 +1,4 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE TemplateHaskell #-} {- Version number-related utilities. See also the Makefile. -} @@ -7,12 +6,11 @@ Version number-related utilities. See also the Makefile. module Hledger.Cli.Version ( packageversion, progname, - prognameandversion, versionStringFor, ) where -import GitHash (giDescribe, tGitInfoCwdTry) +import GitHash (GitInfo, giDescribe) import System.Info (os, arch) import Hledger.Utils @@ -56,11 +54,6 @@ buildversion = prettify . splitAtElement '.' $ packageversion ++ patchlevel progname :: String 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 @@ -70,11 +63,11 @@ prognameandversion = versionStringFor progname -- * the platform (OS) name -- * the processor architecture name. -- -versionStringFor :: String -> String -versionStringFor progname = concat [ +versionStringFor :: Either String GitInfo -> String -> String +versionStringFor gitinfo progname = concat [ progname , " " - , either (const buildversion) giDescribe $$tGitInfoCwdTry + , either (const buildversion) giDescribe gitinfo , ", " , os' , "-"