From 1a29b5b52eec641a5456d7c8dc24356c90107bc0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 15 Oct 2011 16:21:08 -0400 Subject: reorganize log modules no code changes --- Logs/Location.hs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Logs/Location.hs (limited to 'Logs/Location.hs') diff --git a/Logs/Location.hs b/Logs/Location.hs new file mode 100644 index 000000000..4e8b2b535 --- /dev/null +++ b/Logs/Location.hs @@ -0,0 +1,58 @@ +{- git-annex location log + - + - git-annex keeps track of which repositories have the contents of annexed + - files. + - + - Repositories record their UUID and the date when they --get or --drop + - a value. + - + - Copyright 2010-2011 Joey Hess + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Logs.Location ( + LogStatus(..), + logChange, + readLog, + keyLocations, + loggedKeys, + logFile, + logFileKey +) where + +import Common.Annex +import qualified Git +import qualified Annex.Branch +import Logs.UUID +import Logs.Presence + +{- Log a change in the presence of a key's value in a repository. -} +logChange :: Git.Repo -> Key -> UUID -> LogStatus -> Annex () +logChange repo key u s + | null u = error $ + "unknown UUID for " ++ Git.repoDescribe repo ++ + " (have you run git annex init there?)" + | otherwise = addLog (logFile key) =<< logNow s u + +{- Returns a list of repository UUIDs that, according to the log, have + - the value of a key. -} +keyLocations :: Key -> Annex [UUID] +keyLocations = currentLog . logFile + +{- Finds all keys that have location log information. + - (There may be duplicate keys in the list.) -} +loggedKeys :: Annex [Key] +loggedKeys = mapMaybe (logFileKey . takeFileName) <$> Annex.Branch.files + +{- The filename of the log file for a given key. -} +logFile :: Key -> String +logFile key = hashDirLower key ++ keyFile key ++ ".log" + +{- Converts a log filename into a key. -} +logFileKey :: FilePath -> Maybe Key +logFileKey file + | end == ".log" = fileKey beginning + | otherwise = Nothing + where + (beginning, end) = splitAt (length file - 4) file -- cgit v1.2.3