diff --git a/Branch.hs b/Branch.hs index 4f204929ea..a43ee227b0 100644 --- a/Branch.hs +++ b/Branch.hs @@ -11,7 +11,7 @@ module Branch ( get, change, commit, - shortref + files ) where import Control.Monad (unless, when, liftM) @@ -222,3 +222,10 @@ cmdOutput cmd params = do let rv = seq retval retval _ <- getProcessStatus True False pid return rv + +{- Lists all files on the branch. -} +files :: Annex [FilePath] +files = withIndexUpdate $ do + g <- Annex.gitRepo + liftIO $ Git.pipeNullSplit g + [Params "ls-tree --name-only -r -z", Param fullname] diff --git a/Command/Unused.hs b/Command/Unused.hs index 5d4e433ad8..51964cc57c 100644 --- a/Command/Unused.hs +++ b/Command/Unused.hs @@ -66,10 +66,8 @@ checkRemoteUnused name = do checkRemoteUnused' :: Remote.Remote Annex -> Annex () checkRemoteUnused' r = do showNote $ "checking for unused data..." - g <- Annex.gitRepo referenced <- getKeysReferenced - logged <- loggedKeys g - remotehas <- filterM isthere logged + remotehas <- filterM isthere =<< loggedKeys let remoteunused = remotehas `exclude` referenced let list = number 0 remoteunused writeUnusedFile "" list diff --git a/LocationLog.hs b/LocationLog.hs index 8dbeb729ca..4e2caca959 100644 --- a/LocationLog.hs +++ b/LocationLog.hs @@ -26,7 +26,6 @@ module LocationLog ( import Data.Time.Clock.POSIX import Data.Time import System.Locale -import System.Directory import System.FilePath import qualified Data.Map as Map import Control.Monad (when) @@ -35,7 +34,6 @@ import Control.Monad.State (liftIO) import qualified GitRepo as Git import qualified Branch -import Utility import UUID import Types import Locations @@ -148,19 +146,6 @@ mapLog m l = {- Finds all keys that have location log information. - (There may be duplicate keys in the list.) -} -loggedKeys :: Git.Repo -> Annex [Key] -loggedKeys repo = do - _ <- error "FIXME.. does not look in git-annex branch yet" - exists <- liftIO $ doesDirectoryExist dir - if exists - then do - -- 2 levels of hashing - levela <- liftIO $ dirContents dir - levelb <- mapM tryDirContents levela - files <- mapM tryDirContents (concat levelb) - return $ catMaybes $ - map (logFileKey . takeFileName) (concat files) - else return [] - where - tryDirContents d = liftIO $ catch (dirContents d) (return . const []) - dir = gitStateDir repo +loggedKeys :: Annex [Key] +loggedKeys = + return . catMaybes . map (logFileKey . takeFileName) =<< Branch.files