mercurial/localrepo.py
changeset 20925 5174c48ed8d8
parent 20924 e10000369b47
child 20926 7c1ed40e3325
equal deleted inserted replaced
20924:e10000369b47 20925:5174c48ed8d8
  1712         discbases = []
  1712         discbases = []
  1713         for n in roots:
  1713         for n in roots:
  1714             discbases.extend([p for p in cl.parents(n) if p != nullid])
  1714             discbases.extend([p for p in cl.parents(n) if p != nullid])
  1715         outgoing = discovery.outgoing(cl, discbases, heads)
  1715         outgoing = discovery.outgoing(cl, discbases, heads)
  1716         bundler = changegroup.bundle10(self)
  1716         bundler = changegroup.bundle10(self)
  1717         return self._changegroupsubset(outgoing, bundler, source)
  1717         return changegroup.getsubset(self, outgoing, bundler, source)
  1718 
  1718 
  1719     def getlocalbundle(self, source, outgoing, bundlecaps=None):
  1719     def getlocalbundle(self, source, outgoing, bundlecaps=None):
  1720         """Like getbundle, but taking a discovery.outgoing as an argument.
  1720         """Like getbundle, but taking a discovery.outgoing as an argument.
  1721 
  1721 
  1722         This is only implemented for local repos and reuses potentially
  1722         This is only implemented for local repos and reuses potentially
  1723         precomputed sets in outgoing."""
  1723         precomputed sets in outgoing."""
  1724         if not outgoing.missing:
  1724         if not outgoing.missing:
  1725             return None
  1725             return None
  1726         bundler = changegroup.bundle10(self, bundlecaps)
  1726         bundler = changegroup.bundle10(self, bundlecaps)
  1727         return self._changegroupsubset(outgoing, bundler, source)
  1727         return changegroup.getsubset(self, outgoing, bundler, source)
  1728 
  1728 
  1729     def getbundle(self, source, heads=None, common=None, bundlecaps=None):
  1729     def getbundle(self, source, heads=None, common=None, bundlecaps=None):
  1730         """Like changegroupsubset, but returns the set difference between the
  1730         """Like changegroupsubset, but returns the set difference between the
  1731         ancestors of heads and the ancestors common.
  1731         ancestors of heads and the ancestors common.
  1732 
  1732 
  1744         if not heads:
  1744         if not heads:
  1745             heads = cl.heads()
  1745             heads = cl.heads()
  1746         return self.getlocalbundle(source,
  1746         return self.getlocalbundle(source,
  1747                                    discovery.outgoing(cl, common, heads),
  1747                                    discovery.outgoing(cl, common, heads),
  1748                                    bundlecaps=bundlecaps)
  1748                                    bundlecaps=bundlecaps)
  1749 
       
  1750     @unfilteredmethod
       
  1751     def _changegroupsubset(self, outgoing, bundler, source,
       
  1752                            fastpath=False):
       
  1753         commonrevs = outgoing.common
       
  1754         csets = outgoing.missing
       
  1755         heads = outgoing.missingheads
       
  1756         # We go through the fast path if we get told to, or if all (unfiltered
       
  1757         # heads have been requested (since we then know there all linkrevs will
       
  1758         # be pulled by the client).
       
  1759         heads.sort()
       
  1760         fastpathlinkrev = fastpath or (
       
  1761                 self.filtername is None and heads == sorted(self.heads()))
       
  1762 
       
  1763         self.hook('preoutgoing', throw=True, source=source)
       
  1764         self.changegroupinfo(csets, source)
       
  1765         gengroup = bundler.generate(commonrevs, csets, fastpathlinkrev, source)
       
  1766         return changegroup.unbundle10(util.chunkbuffer(gengroup), 'UN')
       
  1767 
  1749 
  1768     def changegroup(self, basenodes, source):
  1750     def changegroup(self, basenodes, source):
  1769         # to avoid a race we use changegroupsubset() (issue1320)
  1751         # to avoid a race we use changegroupsubset() (issue1320)
  1770         return self.changegroupsubset(basenodes, self.heads(), source)
  1752         return self.changegroupsubset(basenodes, self.heads(), source)
  1771 
  1753