···17781778 end
17791779 else begin
17801780 (* OPTIMIZATION: skip packages already in sync *)
17811781- let to_pull, to_skip = List.partition needs_pull successfully_fetched in
17811781+ (* But always pull repos that received commits from fetch *)
17821782+ let repos_updated_by_fetch =
17831783+ List.filter_map
17841784+ (fun (name, was_cloned, commits) ->
17851785+ if was_cloned || commits > 0 then Some name else None)
17861786+ fetch_successes
17871787+ in
17881788+ let needs_pull_after_fetch pkg =
17891789+ needs_pull pkg
17901790+ || List.mem (Package.repo_name pkg) repos_updated_by_fetch
17911791+ in
17921792+ let to_pull, to_skip =
17931793+ List.partition needs_pull_after_fetch successfully_fetched
17941794+ in
17821795 Log.app (fun m -> m " Updating subtrees...");
17831796 if to_skip <> [] then
17841797 Log.app (fun m ->