diff options
author | Joey Hess <joey@kitenet.net> | 2013-01-19 14:11:23 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-01-19 14:11:23 -0400 |
commit | f0958c5fa7dddc819462e2eb8bf74e26449fe6b2 (patch) | |
tree | 093307985e28432c03ad495f6ea62b6f263bcc57 /Command | |
parent | feb85acc2c8c737ad2f579d8feb71bc3538c61d5 (diff) |
fsck: Detect and fix consistency errors in direct mode mapping files.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Fsck.hs | 14 |
1 files changed, 14 insertions, 0 deletions
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. - |