diff options
author | Joey Hess <joey@kitenet.net> | 2011-10-15 16:21:08 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-10-15 16:21:08 -0400 |
commit | 1a29b5b52eec641a5456d7c8dc24356c90107bc0 (patch) | |
tree | 0b902c278129bd085e8db986af168a4e46d3dea6 /Logs/Location.hs | |
parent | 279150ccd5ad937a44cbff798ab7bb118ad1dbee (diff) |
reorganize log modules
no code changes
Diffstat (limited to 'Logs/Location.hs')
-rw-r--r-- | Logs/Location.hs | 58 |
1 files changed, 58 insertions, 0 deletions
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 <joey@kitenet.net> + - + - 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 |