comparison mercurial/changegroup.py @ 38983:fbbda9ff3deb

changegroup: pass mfdicts properly With the narrow code part of core, the hacky pass-argument-via- attribute-on-self can be accomplished with a regular function argument. Differential Revision: https://phab.mercurial-scm.org/D4140
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 06 Aug 2018 11:06:22 -0700
parents 037debbf869c
children a3105433ecc4
comparison
equal deleted inserted replaced
38982:037debbf869c 38983:fbbda9ff3deb
751 751
752 for chunk in self.generatemanifests(commonrevs, clrevorder, 752 for chunk in self.generatemanifests(commonrevs, clrevorder,
753 fastpathlinkrev, mfs, fnodes, source): 753 fastpathlinkrev, mfs, fnodes, source):
754 yield chunk 754 yield chunk
755 755
756 if self._ellipses: 756 mfdicts = None
757 mfdicts = None 757 if self._ellipses and self._isshallow:
758 if self._isshallow: 758 mfdicts = [(self._repo.manifestlog[n].read(), lr)
759 mfdicts = [(self._repo.manifestlog[n].read(), lr) 759 for (n, lr) in mfs.iteritems()]
760 for (n, lr) in mfs.iteritems()]
761 760
762 mfs.clear() 761 mfs.clear()
763 clrevs = set(cl.rev(x) for x in clnodes) 762 clrevs = set(cl.rev(x) for x in clnodes)
764 763
765 if not fastpathlinkrev: 764 if not fastpathlinkrev:
771 llr = filerevlog.linkrev 770 llr = filerevlog.linkrev
772 fln = filerevlog.node 771 fln = filerevlog.node
773 revs = ((r, llr(r)) for r in filerevlog) 772 revs = ((r, llr(r)) for r in filerevlog)
774 return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs) 773 return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs)
775 774
776 if self._ellipses:
777 # We need to pass the mfdicts variable down into
778 # generatefiles(), but more than one command might have
779 # wrapped generatefiles so we can't modify the function
780 # signature. Instead, we pass the data to ourselves using an
781 # instance attribute. I'm sorry.
782 self._mfdicts = mfdicts
783
784 for chunk in self.generatefiles(changedfiles, linknodes, commonrevs, 775 for chunk in self.generatefiles(changedfiles, linknodes, commonrevs,
785 source): 776 source, mfdicts):
786 yield chunk 777 yield chunk
787 778
788 yield self._close() 779 yield self._close()
789 780
790 if clnodes: 781 if clnodes:
933 yield x 924 yield x
934 self._verbosenote(_('%8.i (manifests)\n') % size) 925 self._verbosenote(_('%8.i (manifests)\n') % size)
935 yield self._manifestsend 926 yield self._manifestsend
936 927
937 # The 'source' parameter is useful for extensions 928 # The 'source' parameter is useful for extensions
938 def generatefiles(self, changedfiles, linknodes, commonrevs, source): 929 def generatefiles(self, changedfiles, linknodes, commonrevs, source,
930 mfdicts):
939 changedfiles = list(filter(self._filematcher, changedfiles)) 931 changedfiles = list(filter(self._filematcher, changedfiles))
940 932
941 if self._isshallow: 933 if self._isshallow:
942 # See comment in generate() for why this sadness is a thing.
943 mfdicts = self._mfdicts
944 del self._mfdicts
945 # In a shallow clone, the linknodes callback needs to also include 934 # In a shallow clone, the linknodes callback needs to also include
946 # those file nodes that are in the manifests we sent but weren't 935 # those file nodes that are in the manifests we sent but weren't
947 # introduced by those manifests. 936 # introduced by those manifests.
948 commonctxs = [self._repo[c] for c in commonrevs] 937 commonctxs = [self._repo[c] for c in commonrevs]
949 oldlinknodes = linknodes 938 oldlinknodes = linknodes