sync: Sync to lower cost remotes first.

This has two benefits.

1. When a lot of refs are going to be received, get them via lower cost
   connection when possible.
2. Allows ctrl-c of sync after the cheaper remotes have been pulled from
   (or pushed to).
This commit is contained in:
Joey Hess 2012-03-10 15:37:38 -04:00
parent 5ab82230f7
commit 997e29f294
2 changed files with 4 additions and 3 deletions

View file

@ -59,14 +59,14 @@ syncRemotes rs = do
where
pickfast = (++) <$> listed <*> (good =<< fastest <$> available)
wanted
| null rs = good =<< available
| null rs = good =<< concat . byspeed <$> available
| otherwise = listed
listed = catMaybes <$> mapM (Remote.byName . Just) rs
available = filter nonspecial <$> Remote.enabledRemoteList
good = filterM $ Remote.Git.repoAvail . Types.Remote.repo
nonspecial r = Types.Remote.remotetype r == Remote.Git.remote
fastest = fromMaybe [] . headMaybe .
map snd . sort . M.toList . costmap
fastest = fromMaybe [] . headMaybe . byspeed
byspeed = map snd . sort . M.toList . costmap
costmap = M.fromListWith (++) . map costpair
costpair r = (Types.Remote.cost r, [r])

1
debian/changelog vendored
View file

@ -2,6 +2,7 @@ git-annex (3.20120310) UNRELEASED; urgency=low
* fsck: Fix up any broken links and misplaced content caused by the
directory hash calculation bug fixed in the last release.
* sync: Sync to lower cost remotes first.
-- Joey Hess <joeyh@debian.org> Sat, 10 Mar 2012 14:03:22 -0400