diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | Logs/TimeStamp.hs | 25 |
2 files changed, 18 insertions, 8 deletions
@@ -5,6 +5,7 @@ git-annex (6.20160924) UNRELEASED; urgency=medium * Optimisations to git-annex branch query and setting, avoiding repeated copies of the environment. Speeds up commands like "git-annex find --in remote" by over 50%. + * Optimised git-annex branch log file timestamp parsing. -- Joey Hess <id@joeyh.name> Mon, 26 Sep 2016 16:46:19 -0400 diff --git a/Logs/TimeStamp.hs b/Logs/TimeStamp.hs index 0891f920b..a07b6a66d 100644 --- a/Logs/TimeStamp.hs +++ b/Logs/TimeStamp.hs @@ -1,6 +1,6 @@ {- log timestamp parsing - - - Copyright 2015 Joey Hess <id@joeyh.name> + - Copyright 2015-2016 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} @@ -9,22 +9,31 @@ module Logs.TimeStamp where +import Utility.PartialPrelude +import Utility.Misc + import Data.Time.Clock.POSIX import Data.Time +import Data.Ratio #if ! MIN_VERSION_time(1,5,0) import System.Locale #endif -import Control.Applicative -import Prelude {- Parses how POSIXTime shows itself: "1431286201.113452s" - Also handles the format with no fractional seconds. -} parsePOSIXTime :: String -> Maybe POSIXTime -#if MIN_VERSION_time(1,5,0) -parsePOSIXTime s = utcTimeToPOSIXSeconds <$> parseTimeM True defaultTimeLocale "%s%Qs" s -#else -parsePOSIXTime s = utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" s -#endif +parsePOSIXTime s = do + let (sn, sd) = separate (== '.') s + n <- readi sn + if null sd + then return (fromIntegral n) + else do + d <- readi sd + let r = d % (10 ^ (length sd - 1)) + return (fromIntegral n + fromRational r) + where + readi :: String -> Maybe Integer + readi = readish formatPOSIXTime :: String -> POSIXTime -> String formatPOSIXTime fmt t = formatTime defaultTimeLocale fmt (posixSecondsToUTCTime t) |