diff options
author | Joey Hess <id@joeyh.name> | 2015-12-15 17:47:59 -0700 |
---|---|---|
committer | Joey Hess <id@joeyh.name> | 2015-12-15 17:47:59 -0700 |
commit | 7c12f0ac9224246dac308e837bccb5b2157062ee (patch) | |
tree | 0caa943db39f9a2bfad404c547acda354076b46a /Utility/DottedVersion.hs | |
download | git-repair-7c12f0ac9224246dac308e837bccb5b2157062ee.tar.gz |
Import git-repair_1.20151215.orig.tar.xz
[dgit import orig git-repair_1.20151215.orig.tar.xz]
Diffstat (limited to 'Utility/DottedVersion.hs')
-rw-r--r-- | Utility/DottedVersion.hs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Utility/DottedVersion.hs b/Utility/DottedVersion.hs new file mode 100644 index 0000000..ebf4c0b --- /dev/null +++ b/Utility/DottedVersion.hs @@ -0,0 +1,38 @@ +{- dotted versions, such as 1.0.1 + - + - Copyright 2011-2014 Joey Hess <id@joeyh.name> + - + - License: BSD-2-clause + -} + +{-# OPTIONS_GHC -fno-warn-tabs #-} + +module Utility.DottedVersion where + +import Common + +data DottedVersion = DottedVersion String Integer + deriving (Eq) + +instance Ord DottedVersion where + compare (DottedVersion _ x) (DottedVersion _ y) = compare x y + +instance Show DottedVersion where + show (DottedVersion s _) = s + +{- To compare dotted versions like 1.7.7 and 1.8, they are normalized to + - a somewhat arbitrary integer representation. -} +normalize :: String -> DottedVersion +normalize v = DottedVersion 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 |