From 3470260a8500b42f805b8263af9c73b99706bb92 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 27 Mar 2011 16:24:46 -0400 Subject: [PATCH] clean up remote list generation to only run once --- Remote.hs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Remote.hs b/Remote.hs index 078a603bbf..f4b56846b1 100644 --- a/Remote.hs +++ b/Remote.hs @@ -6,7 +6,6 @@ -} module Remote ( - generate, keyPossibilities, remotesWithUUID, remotesWithoutUUID @@ -27,11 +26,19 @@ import LocationLog generators :: [Annex [Remote Annex]] generators = [Remote.GitRemote.generate] -{- generates a list of all available Remotes -} -generate :: Annex [Remote Annex] -generate = do - lists <- sequence generators - return $ concat lists +{- Builds a list of all available Remotes. + - Since doing so can be expensive, the list is cached in the Annex. -} +genList :: Annex [Remote Annex] +genList = do + liftIO $ putStrLn "Remote.genList" + rs <- Annex.getState Annex.remotes + if null rs + then do + lists <- sequence generators + let rs' = concat lists + Annex.changeState $ \s -> s { Annex.remotes = rs' } + return rs' + else return rs {- Filters a list of remotes to ones that have the listed uuids. -} remotesWithUUID :: [Remote Annex] -> [UUID] -> [Remote Annex] @@ -60,7 +67,7 @@ keyPossibilities key = do let validtrusteduuids = intersect validuuids trusted -- remotes that match uuids that have the key - allremotes <- generate + allremotes <- genList let validremotes = remotesWithUUID allremotes validuuids return (sort validremotes, validtrusteduuids)