summaryrefslogtreecommitdiff
path: root/Command/Fsck.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-01-19 14:11:23 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-01-19 14:11:23 -0400
commitf0958c5fa7dddc819462e2eb8bf74e26449fe6b2 (patch)
tree093307985e28432c03ad495f6ea62b6f263bcc57 /Command/Fsck.hs
parentfeb85acc2c8c737ad2f579d8feb71bc3538c61d5 (diff)
fsck: Detect and fix consistency errors in direct mode mapping files.
Diffstat (limited to 'Command/Fsck.hs')
-rw-r--r--Command/Fsck.hs14
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.
-