diff options
Diffstat (limited to 'Git/Version.hs')
-rw-r--r-- | Git/Version.hs | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/Git/Version.hs b/Git/Version.hs index 5c61f85..19ff945 100644 --- a/Git/Version.hs +++ b/Git/Version.hs @@ -1,22 +1,23 @@ {- git versions - - - Copyright 2011, 2013 Joey Hess <joey@kitenet.net> + - Copyright 2011, 2013 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} -module Git.Version where +{-# OPTIONS_GHC -fno-warn-tabs #-} -import Common - -data GitVersion = GitVersion String Integer - deriving (Eq) +module Git.Version ( + installed, + older, + normalize, + GitVersion, +) where -instance Ord GitVersion where - compare (GitVersion _ x) (GitVersion _ y) = compare x y +import Common +import Utility.DottedVersion -instance Show GitVersion where - show (GitVersion s _) = s +type GitVersion = DottedVersion installed :: IO GitVersion installed = normalize . extract <$> readProcess "git" ["--version"] @@ -25,19 +26,7 @@ installed = normalize . extract <$> readProcess "git" ["--version"] [] -> "" (l:_) -> unwords $ drop 2 $ words l -{- To compare dotted versions like 1.7.7 and 1.8, they are normalized to - - a somewhat arbitrary integer representation. -} -normalize :: String -> GitVersion -normalize v = GitVersion v $ - sum $ mult 1 $ reverse $ extend precision $ take precision $ - map readi $ split "." v - where - extend n l = l ++ replicate (n - length l) 0 - mult _ [] = [] - mult n (x:xs) = (n*x) : mult (n*10^width) xs - readi :: String -> Integer - readi s = case reads s of - ((x,_):_) -> x - _ -> 0 - precision = 10 -- number of segments of the version to compare - width = length "yyyymmddhhmmss" -- maximum width of a segment +older :: String -> IO Bool +older n = do + v <- installed + return $ v < normalize n |