diff options
author | Joey Hess <joey@kitenet.net> | 2010-11-07 17:26:21 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-11-07 17:26:21 -0400 |
commit | ea8ccaa3d5416044ca69e4a3dcb7b879aec0ff4c (patch) | |
tree | f04998a4a1500d47f150dead5abadd9e0d110c61 /Command/Fsck.hs | |
parent | 55b92860ceb099614ac9ebe4c37e92b57ad6a430 (diff) |
rough in fsck
Diffstat (limited to 'Command/Fsck.hs')
-rw-r--r-- | Command/Fsck.hs | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/Command/Fsck.hs b/Command/Fsck.hs index bd5a9ad7f..c86f30ff8 100644 --- a/Command/Fsck.hs +++ b/Command/Fsck.hs @@ -7,15 +7,10 @@ module Command.Fsck where -import Control.Monad.State (liftIO) -import System.Posix.Files -import System.Directory - import Command -import qualified Annex import Types -import Utility import Core +import qualified Data.Map as M {- Checks the whole annex for problems. -} start :: SubCmdStart @@ -35,5 +30,40 @@ perform = do checkUnused :: Annex Bool checkUnused = do showNote "checking for unused data..." - -- TODO - return False + unused <- unusedKeys + if (null unused) + then return True + else do + showLongNote $ w unused + return False + where + w u = unlines $ [ + "Some annexed data is no longer pointed to by any file.", + "If this data is no longer needed, it can be removed using git-annex dropkey:" + ] ++ map show u + +unusedKeys :: Annex [Key] +unusedKeys = do + present <- getKeysPresent + referenced <- getKeysReferenced + + -- Constructing a single map, of the set that tends to be smaller, + -- appears more efficient in both memory and CPU than constructing + -- and taking the M.difference of two maps. + let present_m = existsMap present + let unused_m = remove referenced present_m + return $ M.keys unused_m + where + remove [] m = m + remove (x:xs) m = remove xs $ M.delete x m + +existsMap :: Ord k => [k] -> M.Map k Int +existsMap l = M.fromList $ map (\k -> (k, 1)) l + +getKeysPresent :: Annex [Key] +getKeysPresent = do + return [] + +getKeysReferenced :: Annex [Key] +getKeysReferenced = do + return [] |