Optimised git-annex branch log file timestamp parsing. 10% speedup
This sped up git annex find --not --in web from 6.64s to 5.69s. The optimised parser is probably more like 50% faster than the general one it replaced.
This commit is contained in:
parent
3e7218b220
commit
7cae6c746c
2 changed files with 18 additions and 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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue