support time-1.5.0

This no longer uses old-locale's defaultTimeLocale, but provides one
of its own.

Factored out a Logs.TimeStamp.
This commit is contained in:
Joey Hess 2015-05-10 14:45:55 -04:00
parent fcb8394e5f
commit 6cf62a9bde
10 changed files with 28 additions and 39 deletions

View file

@ -16,6 +16,7 @@ import Assistant.Types.NetMessager
import Utility.NotificationBroadcaster import Utility.NotificationBroadcaster
import Logs.Transfer import Logs.Transfer
import Logs.Trust import Logs.Trust
import Logs.TimeStamp
import qualified Remote import qualified Remote
import qualified Types.Remote as Remote import qualified Types.Remote as Remote
import qualified Git import qualified Git
@ -23,8 +24,6 @@ import qualified Git
import Control.Concurrent.STM import Control.Concurrent.STM
import System.Posix.Types import System.Posix.Types
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import qualified Data.Map as M import qualified Data.Map as M
import qualified Data.Set as S import qualified Data.Set as S
import qualified Data.Text as T import qualified Data.Text as T
@ -125,21 +124,18 @@ readDaemonStatusFile file = parse <$> newDaemonStatus <*> readFile file
where where
parse status = foldr parseline status . lines parse status = foldr parseline status . lines
parseline line status parseline line status
| key == "lastRunning" = parseval readtime $ \v -> | key == "lastRunning" = parseval parsePOSIXTime $ \v ->
status { lastRunning = Just v } status { lastRunning = Just v }
| key == "scanComplete" = parseval readish $ \v -> | key == "scanComplete" = parseval readish $ \v ->
status { scanComplete = v } status { scanComplete = v }
| key == "sanityCheckRunning" = parseval readish $ \v -> | key == "sanityCheckRunning" = parseval readish $ \v ->
status { sanityCheckRunning = v } status { sanityCheckRunning = v }
| key == "lastSanityCheck" = parseval readtime $ \v -> | key == "lastSanityCheck" = parseval parsePOSIXTime $ \v ->
status { lastSanityCheck = Just v } status { lastSanityCheck = Just v }
| otherwise = status -- unparsable line | otherwise = status -- unparsable line
where where
(key, value) = separate (== ':') line (key, value) = separate (== ':') line
parseval parser a = maybe status a (parser value) parseval parser a = maybe status a (parser value)
readtime s = do
d <- parseTime defaultTimeLocale "%s%Qs" s
Just $ utcTimeToPOSIXSeconds d
{- Checks if a time stamp was made after the daemon was lastRunning. {- Checks if a time stamp was made after the daemon was lastRunning.
- -

View file

@ -24,6 +24,7 @@ import Annex.Link
import Logs.Location import Logs.Location
import Logs.Trust import Logs.Trust
import Logs.Activity import Logs.Activity
import Logs.TimeStamp
import Annex.NumCopies import Annex.NumCopies
import Annex.UUID import Annex.UUID
import Utility.DataUnits import Utility.DataUnits
@ -37,9 +38,7 @@ import Utility.PID
import qualified Database.Fsck as FsckDb import qualified Database.Fsck as FsckDb
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Posix.Types (EpochTime) import System.Posix.Types (EpochTime)
import System.Locale
cmd :: [Command] cmd :: [Command]
cmd = [withOptions fsckOptions $ command "fsck" paramPaths seek cmd = [withOptions fsckOptions $ command "fsck" paramPaths seek
@ -476,14 +475,11 @@ getStartTime u = do
liftIO $ catchDefaultIO Nothing $ do liftIO $ catchDefaultIO Nothing $ do
timestamp <- modificationTime <$> getFileStatus f timestamp <- modificationTime <$> getFileStatus f
let fromstatus = Just (realToFrac timestamp) let fromstatus = Just (realToFrac timestamp)
fromfile <- readishTime <$> readFile f fromfile <- parsePOSIXTime <$> readFile f
return $ if matchingtimestamp fromfile fromstatus return $ if matchingtimestamp fromfile fromstatus
then Just timestamp then Just timestamp
else Nothing else Nothing
where where
readishTime :: String -> Maybe POSIXTime
readishTime s = utcTimeToPOSIXSeconds <$>
parseTime defaultTimeLocale "%s%Qs" s
matchingtimestamp fromfile fromstatus = matchingtimestamp fromfile fromstatus =
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
fromfile == fromstatus fromfile == fromstatus

View file

@ -5,15 +5,19 @@
- Licensed under the GNU GPL version 3 or higher. - Licensed under the GNU GPL version 3 or higher.
-} -}
{-# LANGUAGE CPP #-}
module Command.Log where module Command.Log where
import qualified Data.Set as S import qualified Data.Set as S
import qualified Data.Map as M import qualified Data.Map as M
import qualified Data.ByteString.Lazy.Char8 as L import qualified Data.ByteString.Lazy.Char8 as L
import Data.Char
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time import Data.Time
#if ! MIN_VERSION_time(1,5,0)
import System.Locale import System.Locale
import Data.Char #endif
import Common.Annex import Common.Annex
import Command import Command

View file

@ -1,3 +1,5 @@
{-# LANGUAGE CPP #-}
{- git-annex Map log {- git-annex Map log
- -
- This is used to store a Map, in a way that can be union merged. - This is used to store a Map, in a way that can be union merged.
@ -13,10 +15,9 @@ module Logs.MapLog where
import qualified Data.Map as M import qualified Data.Map as M
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import Common import Common
import Logs.TimeStamp
data TimeStamp = Unknown | Date POSIXTime data TimeStamp = Unknown | Date POSIXTime
deriving (Eq, Ord, Show) deriving (Eq, Ord, Show)
@ -42,7 +43,7 @@ parseMapLog fieldparser valueparser = M.fromListWith best . mapMaybe parse . lin
parse line = do parse line = do
let (ts, rest) = splitword line let (ts, rest) = splitword line
(sf, sv) = splitword rest (sf, sv) = splitword rest
date <- Date . utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" ts date <- Date <$> parsePOSIXTime ts
f <- fieldparser sf f <- fieldparser sf
v <- valueparser sv v <- valueparser sv
Just (f, LogEntry date v) Just (f, LogEntry date v)

View file

@ -8,11 +8,10 @@
module Logs.Presence.Pure where module Logs.Presence.Pure where
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import qualified Data.Map as M import qualified Data.Map as M
import Common.Annex import Common.Annex
import Logs.TimeStamp
import Utility.QuickCheck import Utility.QuickCheck
data LogLine = LogLine { data LogLine = LogLine {
@ -29,7 +28,7 @@ parseLog :: String -> [LogLine]
parseLog = mapMaybe parseline . lines parseLog = mapMaybe parseline . lines
where where
parseline l = LogLine parseline l = LogLine
<$> (utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" d) <$> parsePOSIXTime d
<*> parseStatus s <*> parseStatus s
<*> pure rest <*> pure rest
where where

View file

@ -15,11 +15,10 @@ module Logs.SingleValue where
import Common.Annex import Common.Annex
import qualified Annex.Branch import qualified Annex.Branch
import Logs.TimeStamp
import qualified Data.Set as S import qualified Data.Set as S
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
class SingleValueSerializable v where class SingleValueSerializable v where
serialize :: v -> String serialize :: v -> String
@ -42,7 +41,7 @@ parseLog = S.fromList . mapMaybe parse . lines
where where
parse line = do parse line = do
let (ts, s) = splitword line let (ts, s) = splitword line
date <- utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" ts date <- parsePOSIXTime ts
v <- deserialize s v <- deserialize s
Just (LogEntry date v) Just (LogEntry date v)
splitword = separate (== ' ') splitword = separate (== ' ')

View file

@ -18,11 +18,10 @@ import Utility.Percentage
import Utility.QuickCheck import Utility.QuickCheck
import Utility.PID import Utility.PID
import Utility.LockFile import Utility.LockFile
import Logs.TimeStamp
import Data.Time.Clock import Data.Time.Clock
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import Control.Concurrent import Control.Concurrent
{- Enough information to uniquely identify a transfer, used as the filename {- Enough information to uniquely identify a transfer, used as the filename
@ -276,10 +275,6 @@ readTransferInfo mpid s = TransferInfo
then Just <$> readish =<< headMaybe (drop 1 bits) then Just <$> readish =<< headMaybe (drop 1 bits)
else pure Nothing -- not failure else pure Nothing -- not failure
parsePOSIXTime :: String -> Maybe POSIXTime
parsePOSIXTime s = utcTimeToPOSIXSeconds
<$> parseTime defaultTimeLocale "%s%Qs" s
{- The directory holding transfer information files for a given Direction. -} {- The directory holding transfer information files for a given Direction. -}
transferDir :: Direction -> Git.Repo -> FilePath transferDir :: Direction -> Git.Repo -> FilePath
transferDir direction r = gitAnnexTransferDir r </> showLcDirection direction transferDir direction r = gitAnnexTransferDir r </> showLcDirection direction

View file

@ -15,11 +15,10 @@
module Logs.Transitions where module Logs.Transitions where
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import qualified Data.Set as S import qualified Data.Set as S
import Common.Annex import Common.Annex
import Logs.TimeStamp
transitionsLog :: FilePath transitionsLog :: FilePath
transitionsLog = "transitions.log" transitionsLog = "transitions.log"
@ -66,12 +65,13 @@ showTransitionLine :: TransitionLine -> String
showTransitionLine (TransitionLine ts t) = unwords [show t, show ts] showTransitionLine (TransitionLine ts t) = unwords [show t, show ts]
parseTransitionLine :: String -> Maybe TransitionLine parseTransitionLine :: String -> Maybe TransitionLine
parseTransitionLine s = TransitionLine <$> pdate ds <*> readish ts parseTransitionLine s = TransitionLine
<$> parsePOSIXTime ds
<*> readish ts
where where
ws = words s ws = words s
ts = Prelude.head ws ts = Prelude.head ws
ds = unwords $ Prelude.tail ws ds = unwords $ Prelude.tail ws
pdate = utcTimeToPOSIXSeconds <$$> parseTime defaultTimeLocale "%s%Qs"
combineTransitions :: [Transitions] -> Transitions combineTransitions :: [Transitions] -> Transitions
combineTransitions = S.unions combineTransitions = S.unions

View file

@ -30,12 +30,11 @@ module Logs.UUIDBased (
import qualified Data.Map as M import qualified Data.Map as M
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time
import System.Locale
import Common import Common
import Types.UUID import Types.UUID
import Logs.MapLog import Logs.MapLog
import Logs.TimeStamp
type Log v = MapLog UUID v type Log v = MapLog UUID v
@ -73,9 +72,9 @@ parseLogWithUUID parser = M.fromListWith best . mapMaybe parse . lines
info info
| ts == Unknown = drop 1 ws | ts == Unknown = drop 1 ws
| otherwise = drop 1 $ beginning ws | otherwise = drop 1 $ beginning ws
pdate s = case parseTime defaultTimeLocale "%s%Qs" s of pdate s = case parsePOSIXTime s of
Nothing -> Unknown Nothing -> Unknown
Just d -> Date $ utcTimeToPOSIXSeconds d Just d -> Date d
showLogNew :: (v -> String) -> Log v -> String showLogNew :: (v -> String) -> Log v -> String
showLogNew = showMapLog fromUUID showLogNew = showMapLog fromUUID

View file

@ -32,12 +32,12 @@ import qualified Data.Map as M
import qualified Data.Set as S import qualified Data.Set as S
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Time import Data.Time
import System.Locale
import Common.Annex import Common.Annex
import qualified Annex import qualified Annex
import Types.Key import Types.Key
import Utility.Tmp import Utility.Tmp
import Logs.TimeStamp
-- everything that is stored in the unused log -- everything that is stored in the unused log
type UnusedLog = M.Map Key (Int, Maybe POSIXTime) type UnusedLog = M.Map Key (Int, Maybe POSIXTime)
@ -81,7 +81,7 @@ readUnusedLog prefix = do
, return M.empty , return M.empty
) )
where where
parse line = case (readish sint, file2key skey, utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" ts) of parse line = case (readish sint, file2key skey, parsePOSIXTime ts) of
(Just int, Just key, mtimestamp) -> Just (key, (int, mtimestamp)) (Just int, Just key, mtimestamp) -> Just (key, (int, mtimestamp))
_ -> Nothing _ -> Nothing
where where