cli: add a hidden --version+ flag showing number representation (#118)

This commit is contained in:
Simon Michael 2014-10-18 12:34:29 -07:00
parent 3b70362525
commit e8a58d9388
4 changed files with 19 additions and 4 deletions

View File

@ -52,8 +52,10 @@ type Commodity = String
-- | The basic numeric type used in amounts. Different implementations
-- can be selected via cabal flag for testing and benchmarking purposes.
numberRepresentation :: String
#ifdef DOUBLE
type Quantity = Double
numberRepresentation = "Double"
#else
type Quantity = Decimal
deriving instance Data (Quantity)
@ -62,6 +64,7 @@ deriving instance Data (Quantity)
instance ToMarkup (Quantity)
where
toMarkup = toMarkup . show
numberRepresentation = "Decimal"
#endif
-- | An amount's price (none, per unit, or total) in another commodity.

View File

@ -111,7 +111,9 @@ mainmode addons = defMode {
-- flags in the unnamed group, shown last without a heading:
,groupUnnamed = []
-- flags accepted but not shown in the help:
,groupHidden = inputflags -- included here so they'll not raise a confusing error if present with no COMMAND
,groupHidden =
detailedversionflag :
inputflags -- included here so they'll not raise a confusing error if present with no COMMAND
}
}
@ -225,8 +227,8 @@ main = do
isBadCommand = not (null rawcmd) && null cmd
hasHelp args = any (`elem` args) ["--help","-h","-?"]
hasVersion = ("--version" `elem`)
hasDetailedVersion = ("--version+" `elem`)
generalHelp = putStr $ showModeHelp $ mainmode addonDisplayNames
version = putStrLn prognameandversion
badCommandError = error' ("command "++rawcmd++" is not recognized, run with no command to see a list") >> exitFailure
f `orShowHelp` mode = if hasHelp args then putStr (showModeHelp mode) else f
dbgM "processed opts" opts
@ -244,7 +246,9 @@ main = do
-- high priority flags and situations. --help should be highest priority.
| hasHelp argsbeforecmd = dbgM "" "--help before command, showing general help" >> generalHelp
| not (hasHelp argsaftercmd) && (hasVersion argsbeforecmd || (hasVersion argsaftercmd && isInternalCommand))
= version
= putStrLn prognameandversion
| not (hasHelp argsaftercmd) && (hasDetailedVersion argsbeforecmd || (hasDetailedVersion argsaftercmd && isInternalCommand))
= putStrLn prognameanddetailedversion
-- \| (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 = dbgM "" "no command, showing general help" >> generalHelp

View File

@ -10,6 +10,7 @@ module Hledger.Cli.Options (
-- * cmdargs flags & modes
helpflags,
detailedversionflag,
inputflags,
reportflags,
generalflagsgroup1,
@ -85,6 +86,10 @@ helpflags = [
,flagNone ["version"] (setboolopt "version") "show version information"
]
-- | A hidden flag, just for the hledger executable.
detailedversionflag :: Flag RawOpts
detailedversionflag = flagNone ["version+"] (setboolopt "version+") "show version information with extra detail"
-- | Common input-related flags: --file, --rules-file, --alias...
inputflags :: [Flag RawOpts]
inputflags = [

View File

@ -7,17 +7,19 @@ module Hledger.Cli.Version (
progname,
version,
prognameandversion,
prognameanddetailedversion,
binaryfilename
)
where
import System.Info (os, arch)
import Text.Printf
import Hledger.Data.Types (numberRepresentation)
import Hledger.Utils
-- package name and version from the cabal file
progname, version, prognameandversion :: String
progname, version, prognameandversion, prognameanddetailedversion :: String
progname = "hledger"
#ifdef VERSION
version = VERSION
@ -25,6 +27,7 @@ version = VERSION
version = ""
#endif
prognameandversion = progname ++ " " ++ version
prognameanddetailedversion = printf "%s %s, using %s" progname version numberRepresentation
-- developer build version strings include PATCHLEVEL (number of
-- patches since the last tag). If defined, it must be a number.