From f0958c5fa7dddc819462e2eb8bf74e26449fe6b2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 19 Jan 2013 14:11:23 -0400 Subject: fsck: Detect and fix consistency errors in direct mode mapping files. --- Command/Fsck.hs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'Command') diff --git a/Command/Fsck.hs b/Command/Fsck.hs index 2e26b0af6..8f33493b5 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -110,6 +110,7 @@ perform key file backend numcopies = check -- order matters [ fixLink key file , verifyLocationLog key file + , verifyDirectMapping key file , checkKeySize key , checkBackend backend key , checkKeyNumCopies key file numcopies @@ -258,6 +259,19 @@ verifyLocationLog' key desc present u bad = do showNote "fixing location log" bad s +{- Ensures the direct mode mapping file is consistent. Each file + - it lists for the key should exist, and the specified file should be + - included in it. + -} +verifyDirectMapping :: Key -> FilePath -> Annex Bool +verifyDirectMapping key file = do + whenM isDirect $ do + fs <- addAssociatedFile key file + forM_ fs $ \f -> + unlessM (liftIO $ doesFileExist f) $ + void $ removeAssociatedFile key f + return True + {- The size of the data for a key is checked against the size encoded in - the key's metadata, if available. - -- cgit v1.2.3