discovery: don't compute allfuturecommon when it won't be used
In repos with many changesets, the computation of allfuturecommon
can take a significant amount of time. Since it's only used if
there's an obsstore, don't compute it otherwise.
--- a/mercurial/discovery.py Fri Apr 10 18:54:33 2015 -0700
+++ b/mercurial/discovery.py Mon Apr 13 09:54:36 2015 -0400
@@ -272,9 +272,13 @@
# If there are more heads after the push than before, a suitable
# error message, depending on unsynced status, is displayed.
error = None
- allmissing = set(outgoing.missing)
- allfuturecommon = set(c.node() for c in repo.set('%ld', outgoing.common))
- allfuturecommon.update(allmissing)
+ # If there is no obsstore, allfuturecommon won't be used, so no
+ # need to compute it.
+ if repo.obsstore:
+ allmissing = set(outgoing.missing)
+ cctx = repo.set('%ld', outgoing.common)
+ allfuturecommon = set(c.node() for c in cctx)
+ allfuturecommon.update(allmissing)
for branch, heads in sorted(headssum.iteritems()):
remoteheads, newheads, unsyncedheads = heads
candidate_newhs = set(newheads)