summaryrefslogtreecommitdiff
path: root/RemoteUtils.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-06-01 17:49:37 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-06-01 17:57:31 -0400
commita8fb97d2ce8e75b36b8e1572a83efd341e67d43e (patch)
treeab24a8af581281ff8b006309acfb4000317ad072 /RemoteUtils.hs
parent7a3d9d8c2e2bd53d0d4290e99186c6e37f18456d (diff)
Add --trust, --untrust, and --semitrust options.
Diffstat (limited to 'RemoteUtils.hs')
-rw-r--r--RemoteUtils.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/RemoteUtils.hs b/RemoteUtils.hs
new file mode 100644
index 000000000..d042780e4
--- /dev/null
+++ b/RemoteUtils.hs
@@ -0,0 +1,42 @@
+{- git-annex remotes overflow (can't go in there due to dependency cycles)
+ -
+ - Copyright 2011 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+module RemoteUtils where
+
+import Control.Monad.State (liftIO)
+import Data.List
+
+import Annex
+import Trust
+import Remote
+import UUID
+import LocationLog
+import Key
+
+{- 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)