summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-09-06 17:19:29 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-09-06 17:45:47 -0400
commit3623d831d193d029a35aac81571d67768b176534 (patch)
tree23cf930ca5069a7e985ef4f8cc044aec7e9610ee
parent6f98fd53914b2490e866a2613e86b93f689034bf (diff)
refactor
-rw-r--r--Command/Fsck.hs6
-rw-r--r--Command/Whereis.hs5
-rw-r--r--Remote.hs2
-rw-r--r--Trust.hs12
4 files changed, 13 insertions, 12 deletions
diff --git a/Command/Fsck.hs b/Command/Fsck.hs
index bad60d30d..529a5015a 100644
--- a/Command/Fsck.hs
+++ b/Command/Fsck.hs
@@ -10,7 +10,6 @@ module Command.Fsck where
import Control.Monad (when)
import Control.Monad.State (liftIO)
import System.Directory
-import Data.List
import System.Posix.Files
import Command
@@ -124,10 +123,7 @@ checkKeySize key = do
checkKeyNumCopies :: Key -> Maybe FilePath -> Maybe Int -> Annex Bool
checkKeyNumCopies key file numcopies = do
needed <- getNumCopies numcopies
- locations <- keyLocations key
- untrusted <- trustGet UnTrusted
- let untrustedlocations = intersect untrusted locations
- let safelocations = filter (`notElem` untrusted) locations
+ (untrustedlocations, safelocations) <- trustPartition UnTrusted =<< keyLocations key
let present = length safelocations
if present < needed
then do
diff --git a/Command/Whereis.hs b/Command/Whereis.hs
index d5c090e49..850975048 100644
--- a/Command/Whereis.hs
+++ b/Command/Whereis.hs
@@ -8,7 +8,6 @@
module Command.Whereis where
import Control.Monad
-import Data.List
import LocationLog
import Command
@@ -32,9 +31,7 @@ start file = isAnnexed file $ \(key, _) -> do
perform :: Key -> CommandPerform
perform key = do
locations <- keyLocations key
- untrusted <- trustGet UnTrusted
- let untrustedlocations = intersect untrusted locations
- let safelocations = filter (`notElem` untrusted) locations
+ (untrustedlocations, safelocations) <- trustPartition UnTrusted locations
let num = length safelocations
showNote $ show num ++ " " ++ copiesplural num
pp <- prettyPrintUUIDs "whereis" safelocations
diff --git a/Remote.hs b/Remote.hs
index e54d2e233..429f9058b 100644
--- a/Remote.hs
+++ b/Remote.hs
@@ -181,7 +181,7 @@ keyPossibilities' withtrusted key = do
let validuuids = filter (/= u) uuids
-- note that validuuids is assumed to not have dups
- let validtrusteduuids = intersect validuuids trusted
+ let validtrusteduuids = validuuids `intersect` trusted
-- remotes that match uuids that have the key
allremotes <- genList
diff --git a/Trust.hs b/Trust.hs
index 365186da2..232eea6a5 100644
--- a/Trust.hs
+++ b/Trust.hs
@@ -9,11 +9,13 @@ module Trust (
TrustLevel(..),
trustLog,
trustGet,
- trustSet
+ trustSet,
+ trustPartition
) where
import Control.Monad.State
import qualified Data.Map as M
+import Data.List
import Types.TrustLevel
import qualified Branch
@@ -32,7 +34,7 @@ trustGet level = do
return $ M.keys $ M.filter (== level) m
{- Read the trustLog into a map, overriding with any
- - values from forcetrust -}
+ - values from forcetrust. The map is cached for speed. -}
trustMap :: Annex TrustMap
trustMap = do
cached <- Annex.getState Annex.trustmap
@@ -70,3 +72,9 @@ trustSet uuid level = do
where
serialize m = unlines $ map showpair $ M.toList m
showpair (u, t) = u ++ " " ++ show t
+
+{- Partitions a list of UUIDs to those matching a TrustLevel and not. -}
+trustPartition :: TrustLevel -> [UUID] -> Annex ([UUID], [UUID])
+trustPartition level ls = do
+ candidates <- trustGet level
+ return $ partition (`elem` candidates) ls