import Annex.Common
import Types.TrustLevel
-import qualified Annex
import Logs
import Remote.List
import Logs.Trust.Basic as X
{- trustLog in a map, overridden with any values from forcetrust or
- the git config. The map is cached for speed. -}
trustMap :: Annex TrustMap
-trustMap = maybe trustMapLoad return =<< Annex.getState Annex.trustmap
+trustMap = trustMap' =<< remoteList
{- Loads the map, updating the cache, -}
trustMapLoad :: Annex TrustMap
module X,
trustSet,
trustMapRaw,
+ trustMap',
trustMapLoad',
) where
trustMapRaw :: Annex TrustMap
trustMapRaw = calcTrustMap <$> Annex.Branch.get trustLog
+trustMap' :: [Remote] -> Annex TrustMap
+trustMap' l = maybe (trustMapLoad' l) return =<< Annex.getState Annex.trustmap
+
trustMapLoad' :: [Remote] -> Annex TrustMap
trustMapLoad' l = do
forceoverrides <- Annex.getState Annex.forcetrust
keyPossibilities :: Key -> Annex [Remote]
keyPossibilities key = do
+ -- This gets populated with a list of all remotes before this
+ -- remote is used.
remotelist <- Annex.getState Annex.remotes
locs <- loggedLocations key
keyPossibilities' (IncludeIgnored False) key locs remotelist
-- its inputs are also still available.
checkKey :: RemoteStateHandle -> Key -> Annex Bool
checkKey rs k = do
- deadset <- S.fromList . M.keys . M.filter (== DeadTrusted)
- <$> (trustMapLoad' =<< Annex.getState Annex.remotes)
- computeset <- S.fromList . M.keys . M.filter isComputeRemote'
- <$> remoteConfigMap
+ deadset <- getdeadset
+ computeset <- getcomputeset
availablecompute [] deadset computeset k rs
where
+ getdeadset = do
+ -- Usually this will already be populated with all remotes,
+ -- otherwise this compute remote would not be used. Check
+ -- just in case, to avoid trustMap' caching bad inputs.
+ rs <- Annex.getState Annex.remotes
+ if null rs
+ then error "internal"
+ else S.fromList . M.keys . M.filter (== DeadTrusted)
+ <$> trustMap' rs
+
+ getcomputeset = S.fromList . M.keys . M.filter isComputeRemote'
+ <$> remoteConfigMap
+
availablecompute inputkeys deadset computeset k' rs'
| k' `elem` inputkeys = return False -- avoid cycles
| otherwise =