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 |