comparison mercurial/changegroup.py @ 28231:3faba927dd93

changegroup: introduce makelookupmflinknode(dir) This is another step towards making the manifest generation recurse along the directory trees. It makes the two calls to _packmanifests() more similar.
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 12 Feb 2016 23:26:15 -0800
parents 0c2a088ffcc5
children 829d369fc5a8
comparison
equal deleted inserted replaced
28230:0c2a088ffcc5 28231:3faba927dd93
759 tmfnodes = {} 759 tmfnodes = {}
760 760
761 # Callback for the manifest, used to collect linkrevs for filelog 761 # Callback for the manifest, used to collect linkrevs for filelog
762 # revisions. 762 # revisions.
763 # Returns the linkrev node (collected in lookupcl). 763 # Returns the linkrev node (collected in lookupcl).
764 if fastpathlinkrev: 764 def makelookupmflinknode(dir):
765 lookupmflinknode = mfs.__getitem__ 765 if fastpathlinkrev:
766 else: 766 assert not dir
767 return mfs.__getitem__
768
769 if dir:
770 return tmfnodes[dir].get
771
767 def lookupmflinknode(x): 772 def lookupmflinknode(x):
768 """Callback for looking up the linknode for manifests. 773 """Callback for looking up the linknode for manifests.
769 774
770 Returns the linkrev node for the specified manifest. 775 Returns the linkrev node for the specified manifest.
771 776
816 tmfclnodes = tmfnodes.setdefault(submf.dir(), {}) 821 tmfclnodes = tmfnodes.setdefault(submf.dir(), {})
817 tmfclnode = tmfclnodes.setdefault(submf._node, clnode) 822 tmfclnode = tmfclnodes.setdefault(submf._node, clnode)
818 if clrevorder[clnode] < clrevorder[tmfclnode]: 823 if clrevorder[clnode] < clrevorder[tmfclnode]:
819 tmfclnodes[n] = clnode 824 tmfclnodes[n] = clnode
820 return clnode 825 return clnode
826 return lookupmflinknode
821 827
822 mfnodes = self.prune(ml, mfs, commonrevs) 828 mfnodes = self.prune(ml, mfs, commonrevs)
823 size = 0 829 size = 0
824 for x in self._packmanifests('', mfnodes, lookupmflinknode): 830 for x in self._packmanifests('', mfnodes, makelookupmflinknode('')):
825 size += len(x) 831 size += len(x)
826 yield x 832 yield x
827 for dir, nodes in tmfnodes.iteritems(): 833 for dir, nodes in tmfnodes.iteritems():
828 prunednodes = self.prune(ml.dirlog(dir), nodes, commonrevs) 834 prunednodes = self.prune(ml.dirlog(dir), nodes, commonrevs)
829 for x in self._packmanifests(dir, prunednodes, nodes.get): 835 for x in self._packmanifests(dir, prunednodes,
836 makelookupmflinknode(dir)):
830 size += len(x) 837 size += len(x)
831 yield x 838 yield x
832 self._verbosenote(_('%8.i (manifests)\n') % size) 839 self._verbosenote(_('%8.i (manifests)\n') % size)
833 yield self._manifestsdone() 840 yield self._manifestsdone()
834 841