summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Sync.hs8
-rw-r--r--Remote.hs8
2 files changed, 10 insertions, 6 deletions
diff --git a/Command/Sync.hs b/Command/Sync.hs
index 986dd417b..2a27bf870 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -27,7 +27,6 @@ import qualified Types.Remote
import qualified Remote.Git
import Types.Key
-import qualified Data.Map as M
import qualified Data.ByteString.Lazy as L
import Data.Hash.MD5
@@ -62,7 +61,7 @@ syncRemotes rs = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )
where
pickfast = (++) <$> listed <*> (good =<< fastest <$> available)
wanted
- | null rs = good =<< concat . byspeed <$> available
+ | null rs = good =<< concat . Remote.byCost <$> available
| otherwise = listed
listed = do
l <- catMaybes <$> mapM (Remote.byName . Just) rs
@@ -74,10 +73,7 @@ syncRemotes rs = ifM (Annex.getState Annex.fast) ( nub <$> pickfast , wanted )
available = filter (not . Remote.specialRemote)
<$> Remote.enabledRemoteList
good = filterM $ Remote.Git.repoAvail . Types.Remote.repo
- fastest = fromMaybe [] . headMaybe . byspeed
- byspeed = map snd . sort . M.toList . costmap
- costmap = M.fromListWith (++) . map costpair
- costpair r = (Types.Remote.cost r, [r])
+ fastest = fromMaybe [] . headMaybe . Remote.byCost
commit :: CommandStart
commit = do
diff --git a/Remote.hs b/Remote.hs
index ae5a231ad..a5686dd44 100644
--- a/Remote.hs
+++ b/Remote.hs
@@ -24,6 +24,7 @@ module Remote (
remoteMap,
uuidDescriptions,
byName,
+ byCost,
prettyPrintUUIDs,
prettyListUUIDs,
remotesWithUUID,
@@ -224,3 +225,10 @@ forceTrust level remotename = do
- on the remote, but this cannot always be relied on. -}
logStatus :: Remote -> Key -> LogStatus -> Annex ()
logStatus remote key = logChange key (uuid remote)
+
+{- Orders remotes by cost, with ones with the lowest cost grouped together. -}
+byCost :: [Remote] -> [[Remote]]
+byCost = map snd . sort . M.toList . costmap
+ where
+ costmap = M.fromListWith (++) . map costpair
+ costpair r = (cost r, [r])