diff options
Diffstat (limited to 'Remote.hs')
-rw-r--r-- | Remote.hs | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -14,6 +14,7 @@ module Remote ( removeKey, hasKey, hasKeyCheap, + keyPossibilities, remoteTypes, genList, @@ -45,6 +46,8 @@ import qualified Annex import Locations import Utility import Config +import Trust +import LocationLog import qualified Remote.Git import qualified Remote.S3 @@ -110,6 +113,31 @@ remotesWithUUID rs us = filter (\r -> uuid r `elem` us) rs remotesWithoutUUID :: [Remote Annex] -> [UUID] -> [Remote Annex] remotesWithoutUUID rs us = filter (\r -> uuid r `notElem` us) rs +{- Cost ordered lists of remotes that the LocationLog indicate may have a key. + - + - Also returns a list of UUIDs that are trusted to have the key + - (some may not have configured remotes). + -} +keyPossibilities :: Key -> Annex ([Remote Annex], [UUID]) +keyPossibilities key = do + g <- Annex.gitRepo + u <- getUUID g + trusted <- trustGet Trusted + + -- get uuids of all remotes that are recorded to have the key + uuids <- liftIO $ keyLocations g key + let validuuids = filter (/= u) uuids + + -- note that validuuids is assumed to not have dups + let validtrusteduuids = intersect validuuids trusted + + -- remotes that match uuids that have the key + allremotes <- genList + let validremotes = remotesWithUUID allremotes validuuids + + return (sort validremotes, validtrusteduuids) + + {- Filename of remote.log. -} remoteLog :: Annex FilePath remoteLog = do |