{-# LANGUAGE CPP #-}
module Hledger.Cli.Version (
ProgramName,
PackageVersion,
VersionString,
packageversion,
packagemajorversion,
progname,
versionStringWith,
)
where
import GitHash (GitInfo, giHash, giCommitDate)
import System.Info (os, arch)
import Data.List (intercalate)
import Data.Maybe (fromMaybe)
import Hledger.Utils (splitAtElement)
type ProgramName = String
type PackageVersion = String
type VersionString = String
packageversion :: PackageVersion
packageversion :: PackageVersion
packageversion =
#ifdef VERSION
VERSION
#else
""
#endif
packagemajorversion :: PackageVersion
packagemajorversion :: PackageVersion
packagemajorversion = PackageVersion -> [PackageVersion] -> PackageVersion
forall a. [a] -> [[a]] -> [a]
intercalate PackageVersion
"." ([PackageVersion] -> PackageVersion)
-> [PackageVersion] -> PackageVersion
forall a b. (a -> b) -> a -> b
$ Int -> [PackageVersion] -> [PackageVersion]
forall a. Int -> [a] -> [a]
take Int
2 ([PackageVersion] -> [PackageVersion])
-> [PackageVersion] -> [PackageVersion]
forall a b. (a -> b) -> a -> b
$ Char -> PackageVersion -> [PackageVersion]
forall a. Eq a => a -> [a] -> [[a]]
splitAtElement Char
'.' PackageVersion
packageversion
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 =
[PackageVersion] -> PackageVersion
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 PackageVersion -> PackageVersion -> Bool
forall a. Eq a => a -> a -> Bool
== PackageVersion
"darwin" = PackageVersion
"mac"
| PackageVersion
os PackageVersion -> PackageVersion -> Bool
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 (PackageVersion -> [PackageVersion])
-> PackageVersion -> [PackageVersion]
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]
_ ->
PackageVersion -> [PackageVersion] -> PackageVersion
forall a. [a] -> [[a]] -> [a]
intercalate PackageVersion
"-" ([PackageVersion] -> PackageVersion)
-> [PackageVersion] -> PackageVersion
forall a b. (a -> b) -> a -> b
$ [PackageVersion
packagever, PackageVersion
hash, PackageVersion
date]
where
hash :: PackageVersion
hash = Char
'g' Char -> PackageVersion -> PackageVersion
forall a. a -> [a] -> [a]
: Int -> PackageVersion -> PackageVersion
forall a. Int -> [a] -> [a]
take Int
9 (GitInfo -> PackageVersion
giHash GitInfo
gitinfo)
date :: PackageVersion
date = [PackageVersion] -> PackageVersion
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [PackageVersion
year,PackageVersion
mm,PackageVersion
dd]
where
mm :: PackageVersion
mm = PackageVersion -> Maybe PackageVersion -> PackageVersion
forall a. a -> Maybe a -> a
fromMaybe PackageVersion
mon (Maybe PackageVersion -> PackageVersion)
-> Maybe PackageVersion -> PackageVersion
forall a b. (a -> b) -> a -> b
$ PackageVersion
-> [(PackageVersion, PackageVersion)] -> Maybe PackageVersion
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup PackageVersion
mon ([(PackageVersion, PackageVersion)] -> Maybe PackageVersion)
-> [(PackageVersion, PackageVersion)] -> Maybe PackageVersion
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 PackageVersion -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length PackageVersion
day Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
2 then (Char
'0'Char -> PackageVersion -> PackageVersion
forall a. a -> [a] -> [a]
:) else PackageVersion -> PackageVersion
forall a. a -> a
id) PackageVersion
day
[PackageVersion]
_ -> PackageVersion
packageversion