summaryrefslogtreecommitdiff
path: root/Remotes.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-10-13 15:55:18 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-10-13 15:55:18 -0400
commite28ff5bdaf7ce56c0c928904ff883c1e2cd093de (patch)
tree53426c78f8d22c1a0b4e5a52811cd1299c97f85b /Remotes.hs
parent77055f5ff82d2712f599ba77e03d5d2cc022ff65 (diff)
almost able to get files from remotes now!
Diffstat (limited to 'Remotes.hs')
-rw-r--r--Remotes.hs50
1 files changed, 50 insertions, 0 deletions
diff --git a/Remotes.hs b/Remotes.hs
new file mode 100644
index 000000000..ae709a3c2
--- /dev/null
+++ b/Remotes.hs
@@ -0,0 +1,50 @@
+{- git-annex remote repositories -}
+
+module Remotes (
+ remotesList,
+ remotesWithKey
+) where
+
+import Types
+import GitRepo
+import LocationLog
+import Data.String.Utils
+import UUID
+import List
+
+{- Human visible list of remotes. -}
+remotesList :: [GitRepo] -> String
+remotesList remotes = join " " $ map gitRepoDescribe remotes
+
+{- Cost ordered list of remotes that the LocationLog indicate may have a key. -}
+remotesWithKey :: State -> Key -> IO [GitRepo]
+remotesWithKey state key = do
+ uuids <- keyLocations (repo state) key
+ return $ reposByUUID state (remotesByCost state) uuids
+
+{- Cost Ordered list of remotes. -}
+remotesByCost :: State -> [GitRepo]
+remotesByCost state = reposByCost state $ gitConfigRemotes (repo state)
+
+{- Orders a list of git repos by cost. -}
+reposByCost :: State -> [GitRepo] -> [GitRepo]
+reposByCost state l =
+ fst $ unzip $ sortBy (\(r1, c1) (r2, c2) -> compare c1 c2) $ costpairs l
+ where
+ costpairs l = map (\r -> (r, repoCost state r)) l
+
+{- Calculates cost for a repo.
+ -
+ - The default cost is 100 for local repositories, and 200 for remote
+ - repositories; it can also be configured by remote.<name>.annex-cost
+ -}
+repoCost :: State -> GitRepo -> Int
+repoCost state r =
+ if ((length $ config state r) > 0)
+ then read $ config state r
+ else if (gitRepoIsLocal r)
+ then 100
+ else 200
+ where
+ config state r = gitConfig (repo state) (configkey r) ""
+ configkey r = "remote." ++ (gitRepoRemoteName r) ++ ".annex-cost"