{- Chunk logs. - - An object can be stored in chunked for on a remote; these logs keep - track of the chunk size used, and the number of chunks. - - It's possible for a single object to be stored multiple times on the - same remote using different chunk sizes. So, while this is a MapLog, it - is not a normal UUIDBased log. Intead, it's a map from UUID and chunk - size to number of chunks. - - Format: "timestamp uuid:chunksize chunkcount" - - Copyright 2014 Joey Hess - - Licensed under the GNU GPL version 3 or higher. -} module Logs.Chunk ( ChunkMethod(..), ChunkSize, ChunkCount, chunksStored, chunksRemoved, getCurrentChunks, ) where import Common.Annex import Logs import Logs.MapLog import qualified Annex.Branch import Logs.Chunk.Pure import qualified Annex import qualified Data.Map as M import Data.Time.Clock.POSIX chunksStored :: UUID -> Key -> ChunkMethod -> ChunkCount -> Annex () chunksStored u k chunkmethod chunkcount = do ts <- liftIO getPOSIXTime config <- Annex.getGitConfig Annex.Branch.change (chunkLogFile config k) $ showLog . changeMapLog ts (u, chunkmethod) chunkcount . parseLog chunksRemoved :: UUID -> Key -> ChunkMethod -> Annex () chunksRemoved u k chunkmethod = chunksStored u k chunkmethod 0 getCurrentChunks :: UUID -> Key -> Annex [(ChunkMethod, ChunkCount)] getCurrentChunks u k = do config <- Annex.getGitConfig select . parseLog <$> Annex.Branch.get (chunkLogFile config k) where select = filter (\(_m, ct) -> ct > 0) . map (\((_ku, m), l) -> (m, value l)) . M.toList . M.filterWithKey (\(ku, _m) _ -> ku == u)