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:
parent
fcb8394e5f
commit
6cf62a9bde
10 changed files with 28 additions and 39 deletions
|
@ -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.
|
||||||
-
|
-
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 (== ' ')
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue