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
|
* Optimisations to git-annex branch query and setting, avoiding repeated
|
||||||
copies of the environment. Speeds up commands like
|
copies of the environment. Speeds up commands like
|
||||||
"git-annex find --in remote" by over 50%.
|
"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
|
-- Joey Hess <id@joeyh.name> Mon, 26 Sep 2016 16:46:19 -0400
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{- log timestamp parsing
|
{- 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.
|
- Licensed under the GNU GPL version 3 or higher.
|
||||||
-}
|
-}
|
||||||
|
@ -9,22 +9,31 @@
|
||||||
|
|
||||||
module Logs.TimeStamp where
|
module Logs.TimeStamp where
|
||||||
|
|
||||||
|
import Utility.PartialPrelude
|
||||||
|
import Utility.Misc
|
||||||
|
|
||||||
import Data.Time.Clock.POSIX
|
import Data.Time.Clock.POSIX
|
||||||
import Data.Time
|
import Data.Time
|
||||||
|
import Data.Ratio
|
||||||
#if ! MIN_VERSION_time(1,5,0)
|
#if ! MIN_VERSION_time(1,5,0)
|
||||||
import System.Locale
|
import System.Locale
|
||||||
#endif
|
#endif
|
||||||
import Control.Applicative
|
|
||||||
import Prelude
|
|
||||||
|
|
||||||
{- Parses how POSIXTime shows itself: "1431286201.113452s"
|
{- Parses how POSIXTime shows itself: "1431286201.113452s"
|
||||||
- Also handles the format with no fractional seconds. -}
|
- Also handles the format with no fractional seconds. -}
|
||||||
parsePOSIXTime :: String -> Maybe POSIXTime
|
parsePOSIXTime :: String -> Maybe POSIXTime
|
||||||
#if MIN_VERSION_time(1,5,0)
|
parsePOSIXTime s = do
|
||||||
parsePOSIXTime s = utcTimeToPOSIXSeconds <$> parseTimeM True defaultTimeLocale "%s%Qs" s
|
let (sn, sd) = separate (== '.') s
|
||||||
#else
|
n <- readi sn
|
||||||
parsePOSIXTime s = utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" s
|
if null sd
|
||||||
#endif
|
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 :: String -> POSIXTime -> String
|
||||||
formatPOSIXTime fmt t = formatTime defaultTimeLocale fmt (posixSecondsToUTCTime t)
|
formatPOSIXTime fmt t = formatTime defaultTimeLocale fmt (posixSecondsToUTCTime t)
|
||||||
|
|
Loading…
Reference in a new issue