summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG1
-rw-r--r--Logs/TimeStamp.hs25
2 files changed, 18 insertions, 8 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 71f53793a..e94c1b0b3 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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)