diff options
author | Joey Hess <joey@kitenet.net> | 2010-10-13 15:55:18 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-10-13 15:55:18 -0400 |
commit | e28ff5bdaf7ce56c0c928904ff883c1e2cd093de (patch) | |
tree | 53426c78f8d22c1a0b4e5a52811cd1299c97f85b /Remotes.hs | |
parent | 77055f5ff82d2712f599ba77e03d5d2cc022ff65 (diff) |
almost able to get files from remotes now!
Diffstat (limited to 'Remotes.hs')
-rw-r--r-- | Remotes.hs | 50 |
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" |