{-# LANGUAGE CPP #-}
module Hledger.Cli.Version (
ProgramName,
PackageVersion,
VersionString,
packageversion,
progname,
versionStringWith,
)
where
import GitHash (GitInfo, giHash, giCommitDate)
import System.Info (os, arch)
import Data.List (intercalate)
import Data.Maybe (fromMaybe)
type ProgramName = String
type PackageVersion = String
type VersionString = String
packageversion :: PackageVersion
packageversion :: PackageVersion
packageversion =
#ifdef VERSION
VERSION
#else
""
#endif
progname :: ProgramName
progname :: PackageVersion
progname = PackageVersion
"hledger"
versionStringWith :: Either String GitInfo -> ProgramName -> PackageVersion -> VersionString
versionStringWith :: Either PackageVersion GitInfo
-> PackageVersion -> PackageVersion -> PackageVersion
versionStringWith Either PackageVersion GitInfo
egitinfo PackageVersion
prognam PackageVersion
packagever =
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [ PackageVersion
prognam , PackageVersion
" " , PackageVersion
version , PackageVersion
", " , PackageVersion
os' , PackageVersion
"-" , PackageVersion
arch ]
where
os' :: PackageVersion
os' | PackageVersion
os forall a. Eq a => a -> a -> Bool
== PackageVersion
"darwin" = PackageVersion
"mac"
| PackageVersion
os forall a. Eq a => a -> a -> Bool
== PackageVersion
"mingw32" = PackageVersion
"windows"
| Bool
otherwise = PackageVersion
os
version :: PackageVersion
version = case Either PackageVersion GitInfo
egitinfo of
Left PackageVersion
_err -> PackageVersion
packagever
Right GitInfo
gitinfo ->
case PackageVersion -> [PackageVersion]
words forall a b. (a -> b) -> a -> b
$ GitInfo -> PackageVersion
giCommitDate GitInfo
gitinfo of
PackageVersion
_weekday:PackageVersion
mon:PackageVersion
day:PackageVersion
_localtime:PackageVersion
year:PackageVersion
_offset:[PackageVersion]
_ ->
forall a. [a] -> [[a]] -> [a]
intercalate PackageVersion
"-" forall a b. (a -> b) -> a -> b
$ [PackageVersion
packagever, PackageVersion
hash, PackageVersion
date]
where
hash :: PackageVersion
hash = Char
'g' forall a. a -> [a] -> [a]
: forall a. Int -> [a] -> [a]
take Int
9 (GitInfo -> PackageVersion
giHash GitInfo
gitinfo)
date :: PackageVersion
date = forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [PackageVersion
year,PackageVersion
mm,PackageVersion
dd]
where
mm :: PackageVersion
mm = forall a. a -> Maybe a -> a
fromMaybe PackageVersion
mon forall a b. (a -> b) -> a -> b
$ forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup PackageVersion
mon forall a b. (a -> b) -> a -> b
$ [
(PackageVersion
"Jan",PackageVersion
"01")
,(PackageVersion
"Feb",PackageVersion
"02")
,(PackageVersion
"Mar",PackageVersion
"03")
,(PackageVersion
"Apr",PackageVersion
"04")
,(PackageVersion
"May",PackageVersion
"05")
,(PackageVersion
"Jun",PackageVersion
"06")
,(PackageVersion
"Jul",PackageVersion
"07")
,(PackageVersion
"Aug",PackageVersion
"08")
,(PackageVersion
"Sep",PackageVersion
"09")
,(PackageVersion
"Oct",PackageVersion
"10")
,(PackageVersion
"Nov",PackageVersion
"11")
,(PackageVersion
"Dec",PackageVersion
"12")
]
dd :: PackageVersion
dd = (if forall (t :: * -> *) a. Foldable t => t a -> Int
length PackageVersion
day forall a. Ord a => a -> a -> Bool
< Int
2 then (Char
'0'forall a. a -> [a] -> [a]
:) else forall a. a -> a
id) PackageVersion
day
[PackageVersion]
_ -> PackageVersion
packageversion