2011-07-01 19:24:07 +00:00
|
|
|
{- git-annex presence log
|
|
|
|
-
|
|
|
|
- This is used to store presence information in the git-annex branch in
|
|
|
|
- a way that can be union merged.
|
|
|
|
-
|
|
|
|
- A line of the log will look like: "date N INFO"
|
|
|
|
- Where N=1 when the INFO is present, and 0 otherwise.
|
|
|
|
-
|
2014-02-06 16:43:56 +00:00
|
|
|
- Copyright 2010-2014 Joey Hess <joey@kitenet.net>
|
2011-07-01 19:24:07 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
2011-10-15 20:21:08 +00:00
|
|
|
module Logs.Presence (
|
2013-08-31 21:38:33 +00:00
|
|
|
module X,
|
2011-07-01 21:15:46 +00:00
|
|
|
addLog,
|
2011-07-01 19:24:07 +00:00
|
|
|
readLog,
|
|
|
|
logNow,
|
2014-02-06 16:43:56 +00:00
|
|
|
currentLog,
|
|
|
|
historicalLog
|
2011-07-01 19:24:07 +00:00
|
|
|
) where
|
|
|
|
|
|
|
|
import Data.Time.Clock.POSIX
|
|
|
|
|
2013-08-31 21:38:33 +00:00
|
|
|
import Logs.Presence.Pure as X
|
2011-10-05 20:02:51 +00:00
|
|
|
import Common.Annex
|
2011-10-04 04:40:47 +00:00
|
|
|
import qualified Annex.Branch
|
2014-02-06 16:43:56 +00:00
|
|
|
import Git.Types (RefDate)
|
2011-07-01 19:24:07 +00:00
|
|
|
|
2011-07-01 21:15:46 +00:00
|
|
|
addLog :: FilePath -> LogLine -> Annex ()
|
2011-10-04 04:40:47 +00:00
|
|
|
addLog file line = Annex.Branch.change file $ \s ->
|
2011-10-03 19:41:25 +00:00
|
|
|
showLog $ compactLog (line : parseLog s)
|
2011-07-01 21:15:46 +00:00
|
|
|
|
2011-07-01 19:24:07 +00:00
|
|
|
{- Reads a log file.
|
|
|
|
- Note that the LogLines returned may be in any order. -}
|
|
|
|
readLog :: FilePath -> Annex [LogLine]
|
2012-06-29 14:00:05 +00:00
|
|
|
readLog = parseLog <$$> Annex.Branch.get
|
2011-07-01 19:24:07 +00:00
|
|
|
|
|
|
|
{- Generates a new LogLine with the current date. -}
|
|
|
|
logNow :: LogStatus -> String -> Annex LogLine
|
|
|
|
logNow s i = do
|
2011-07-15 07:12:05 +00:00
|
|
|
now <- liftIO getPOSIXTime
|
2011-07-01 19:24:07 +00:00
|
|
|
return $ LogLine now s i
|
|
|
|
|
|
|
|
{- Reads a log and returns only the info that is still in effect. -}
|
|
|
|
currentLog :: FilePath -> Annex [String]
|
2011-09-28 06:35:23 +00:00
|
|
|
currentLog file = map info . filterPresent <$> readLog file
|
2014-02-06 16:43:56 +00:00
|
|
|
|
|
|
|
{- Reads a historical version of a log and returns the info that was in
|
|
|
|
- effect at that time.
|
|
|
|
-
|
|
|
|
- The date is formatted as shown in gitrevisions man page.
|
|
|
|
-}
|
|
|
|
historicalLog :: RefDate -> FilePath -> Annex [String]
|
|
|
|
historicalLog refdate file = map info . filterPresent . parseLog
|
|
|
|
<$> Annex.Branch.getHistorical refdate file
|