From ea506b28110d0e23210fb788b16ffe3deb92f23b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 10 May 2015 14:45:55 -0400 Subject: support time-1.5.0 This no longer uses old-locale's defaultTimeLocale, but provides one of its own. Factored out a Logs.TimeStamp. --- Assistant/DaemonStatus.hs | 10 +++------- Command/Fsck.hs | 8 ++------ Command/Log.hs | 6 +++++- Logs/MapLog.hs | 7 ++++--- Logs/Presence/Pure.hs | 5 ++--- Logs/SingleValue.hs | 5 ++--- Logs/Transfer.hs | 7 +------ Logs/Transitions.hs | 8 ++++---- Logs/UUIDBased.hs | 7 +++---- Logs/Unused.hs | 4 ++-- 10 files changed, 28 insertions(+), 39 deletions(-) diff --git a/Assistant/DaemonStatus.hs b/Assistant/DaemonStatus.hs index 1ed40595e..4c42ffdbe 100644 --- a/Assistant/DaemonStatus.hs +++ b/Assistant/DaemonStatus.hs @@ -16,6 +16,7 @@ import Assistant.Types.NetMessager import Utility.NotificationBroadcaster import Logs.Transfer import Logs.Trust +import Logs.TimeStamp import qualified Remote import qualified Types.Remote as Remote import qualified Git @@ -23,8 +24,6 @@ import qualified Git import Control.Concurrent.STM import System.Posix.Types import Data.Time.Clock.POSIX -import Data.Time -import System.Locale import qualified Data.Map as M import qualified Data.Set as S import qualified Data.Text as T @@ -125,21 +124,18 @@ readDaemonStatusFile file = parse <$> newDaemonStatus <*> readFile file where parse status = foldr parseline status . lines parseline line status - | key == "lastRunning" = parseval readtime $ \v -> + | key == "lastRunning" = parseval parsePOSIXTime $ \v -> status { lastRunning = Just v } | key == "scanComplete" = parseval readish $ \v -> status { scanComplete = v } | key == "sanityCheckRunning" = parseval readish $ \v -> status { sanityCheckRunning = v } - | key == "lastSanityCheck" = parseval readtime $ \v -> + | key == "lastSanityCheck" = parseval parsePOSIXTime $ \v -> status { lastSanityCheck = Just v } | otherwise = status -- unparsable line where (key, value) = separate (== ':') line 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. - diff --git a/Command/Fsck.hs b/Command/Fsck.hs index be59484d9..479f4521c 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -24,6 +24,7 @@ import Annex.Link import Logs.Location import Logs.Trust import Logs.Activity +import Logs.TimeStamp import Annex.NumCopies import Annex.UUID import Utility.DataUnits @@ -37,9 +38,7 @@ import Utility.PID import qualified Database.Fsck as FsckDb import Data.Time.Clock.POSIX -import Data.Time import System.Posix.Types (EpochTime) -import System.Locale cmd :: [Command] cmd = [withOptions fsckOptions $ command "fsck" paramPaths seek @@ -476,14 +475,11 @@ getStartTime u = do liftIO $ catchDefaultIO Nothing $ do timestamp <- modificationTime <$> getFileStatus f let fromstatus = Just (realToFrac timestamp) - fromfile <- readishTime <$> readFile f + fromfile <- parsePOSIXTime <$> readFile f return $ if matchingtimestamp fromfile fromstatus then Just timestamp else Nothing where - readishTime :: String -> Maybe POSIXTime - readishTime s = utcTimeToPOSIXSeconds <$> - parseTime defaultTimeLocale "%s%Qs" s matchingtimestamp fromfile fromstatus = #ifndef mingw32_HOST_OS fromfile == fromstatus diff --git a/Command/Log.hs b/Command/Log.hs index 4bc7bb89a..e1438ba15 100644 --- a/Command/Log.hs +++ b/Command/Log.hs @@ -5,15 +5,19 @@ - Licensed under the GNU GPL version 3 or higher. -} +{-# LANGUAGE CPP #-} + module Command.Log where import qualified Data.Set as S import qualified Data.Map as M import qualified Data.ByteString.Lazy.Char8 as L +import Data.Char import Data.Time.Clock.POSIX import Data.Time +#if ! MIN_VERSION_time(1,5,0) import System.Locale -import Data.Char +#endif import Common.Annex import Command diff --git a/Logs/MapLog.hs b/Logs/MapLog.hs index 3c7eef26b..d5bb67f68 100644 --- a/Logs/MapLog.hs +++ b/Logs/MapLog.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE CPP #-} + {- git-annex Map log - - 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 Data.Time.Clock.POSIX -import Data.Time -import System.Locale import Common +import Logs.TimeStamp data TimeStamp = Unknown | Date POSIXTime deriving (Eq, Ord, Show) @@ -42,7 +43,7 @@ parseMapLog fieldparser valueparser = M.fromListWith best . mapMaybe parse . lin parse line = do let (ts, rest) = splitword line (sf, sv) = splitword rest - date <- Date . utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" ts + date <- Date <$> parsePOSIXTime ts f <- fieldparser sf v <- valueparser sv Just (f, LogEntry date v) diff --git a/Logs/Presence/Pure.hs b/Logs/Presence/Pure.hs index 88f18435f..ec4415aad 100644 --- a/Logs/Presence/Pure.hs +++ b/Logs/Presence/Pure.hs @@ -8,11 +8,10 @@ module Logs.Presence.Pure where import Data.Time.Clock.POSIX -import Data.Time -import System.Locale import qualified Data.Map as M import Common.Annex +import Logs.TimeStamp import Utility.QuickCheck data LogLine = LogLine { @@ -29,7 +28,7 @@ parseLog :: String -> [LogLine] parseLog = mapMaybe parseline . lines where parseline l = LogLine - <$> (utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" d) + <$> parsePOSIXTime d <*> parseStatus s <*> pure rest where diff --git a/Logs/SingleValue.hs b/Logs/SingleValue.hs index dbbe996f3..213bcd217 100644 --- a/Logs/SingleValue.hs +++ b/Logs/SingleValue.hs @@ -15,11 +15,10 @@ module Logs.SingleValue where import Common.Annex import qualified Annex.Branch +import Logs.TimeStamp import qualified Data.Set as S import Data.Time.Clock.POSIX -import Data.Time -import System.Locale class SingleValueSerializable v where serialize :: v -> String @@ -42,7 +41,7 @@ parseLog = S.fromList . mapMaybe parse . lines where parse line = do let (ts, s) = splitword line - date <- utcTimeToPOSIXSeconds <$> parseTime defaultTimeLocale "%s%Qs" ts + date <- parsePOSIXTime ts v <- deserialize s Just (LogEntry date v) splitword = separate (== ' ') diff --git a/Logs/Transfer.hs b/Logs/Transfer.hs index 5b5b8f8cb..078157208 100644 --- a/Logs/Transfer.hs +++ b/Logs/Transfer.hs @@ -18,11 +18,10 @@ import Utility.Percentage import Utility.QuickCheck import Utility.PID import Utility.LockFile +import Logs.TimeStamp import Data.Time.Clock import Data.Time.Clock.POSIX -import Data.Time -import System.Locale import Control.Concurrent {- 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) 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. -} transferDir :: Direction -> Git.Repo -> FilePath transferDir direction r = gitAnnexTransferDir r showLcDirection direction diff --git a/Logs/Transitions.hs b/Logs/Transitions.hs index d782455a6..5ccfd7e8c 100644 --- a/Logs/Transitions.hs +++ b/Logs/Transitions.hs @@ -15,11 +15,10 @@ module Logs.Transitions where import Data.Time.Clock.POSIX -import Data.Time -import System.Locale import qualified Data.Set as S import Common.Annex +import Logs.TimeStamp transitionsLog :: FilePath transitionsLog = "transitions.log" @@ -66,12 +65,13 @@ showTransitionLine :: TransitionLine -> String showTransitionLine (TransitionLine ts t) = unwords [show t, show ts] parseTransitionLine :: String -> Maybe TransitionLine -parseTransitionLine s = TransitionLine <$> pdate ds <*> readish ts +parseTransitionLine s = TransitionLine + <$> parsePOSIXTime ds + <*> readish ts where ws = words s ts = Prelude.head ws ds = unwords $ Prelude.tail ws - pdate = utcTimeToPOSIXSeconds <$$> parseTime defaultTimeLocale "%s%Qs" combineTransitions :: [Transitions] -> Transitions combineTransitions = S.unions diff --git a/Logs/UUIDBased.hs b/Logs/UUIDBased.hs index ac876e65f..5613c6fb4 100644 --- a/Logs/UUIDBased.hs +++ b/Logs/UUIDBased.hs @@ -30,12 +30,11 @@ module Logs.UUIDBased ( import qualified Data.Map as M import Data.Time.Clock.POSIX -import Data.Time -import System.Locale import Common import Types.UUID import Logs.MapLog +import Logs.TimeStamp type Log v = MapLog UUID v @@ -73,9 +72,9 @@ parseLogWithUUID parser = M.fromListWith best . mapMaybe parse . lines info | ts == Unknown = drop 1 ws | otherwise = drop 1 $ beginning ws - pdate s = case parseTime defaultTimeLocale "%s%Qs" s of + pdate s = case parsePOSIXTime s of Nothing -> Unknown - Just d -> Date $ utcTimeToPOSIXSeconds d + Just d -> Date d showLogNew :: (v -> String) -> Log v -> String showLogNew = showMapLog fromUUID diff --git a/Logs/Unused.hs b/Logs/Unused.hs index 883ab8c5b..7a12f186c 100644 --- a/Logs/Unused.hs +++ b/Logs/Unused.hs @@ -32,12 +32,12 @@ import qualified Data.Map as M import qualified Data.Set as S import Data.Time.Clock.POSIX import Data.Time -import System.Locale import Common.Annex import qualified Annex import Types.Key import Utility.Tmp +import Logs.TimeStamp -- everything that is stored in the unused log type UnusedLog = M.Map Key (Int, Maybe POSIXTime) @@ -81,7 +81,7 @@ readUnusedLog prefix = do , return M.empty ) 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)) _ -> Nothing where -- cgit v1.2.3