##// END OF EJS Templates
changegroup: avoid iterating the whole manifest...
Augie Fackler -
r27237:c08814b4 default
parent child Browse files
Show More
@@ -613,7 +613,8 class cg1packer(object):
613 613 clrevorder = {}
614 614 mfs = {} # needed manifests
615 615 fnodes = {} # needed file nodes
616 changedfiles = set()
616 # maps manifest node id -> set(changed files)
617 mfchangedfiles = {}
617 618
618 619 # Callback for the changelog, used to collect changed files and manifest
619 620 # nodes.
@@ -621,9 +622,12 class cg1packer(object):
621 622 def lookupcl(x):
622 623 c = cl.read(x)
623 624 clrevorder[x] = len(clrevorder)
624 changedfiles.update(c[3])
625 n = c[0]
625 626 # record the first changeset introducing this manifest version
626 mfs.setdefault(c[0], x)
627 mfs.setdefault(n, x)
628 # Record a complete list of potentially-changed files in
629 # this manifest.
630 mfchangedfiles.setdefault(n, set()).update(c[3])
627 631 return x
628 632
629 633 self._verbosenote(_('uncompressed size of bundle content:\n'))
@@ -668,8 +672,12 class cg1packer(object):
668 672 clnode = mfs[x]
669 673 if not fastpathlinkrev:
670 674 mdata = ml.readfast(x)
671 for f, n in mdata.iteritems():
672 if f in changedfiles:
675 for f in mfchangedfiles[x]:
676 if True:
677 try:
678 n = mdata[f]
679 except KeyError:
680 continue
673 681 # record the first changeset introducing this filelog
674 682 # version
675 683 fclnodes = fnodes.setdefault(f, {})
@@ -696,6 +704,9 class cg1packer(object):
696 704 return dict(genfilenodes())
697 705 return fnodes.get(fname, {})
698 706
707 changedfiles = set()
708 for x in mfchangedfiles.itervalues():
709 changedfiles.update(x)
699 710 for chunk in self.generatefiles(changedfiles, linknodes, commonrevs,
700 711 source):
701 712 yield chunk
General Comments 0
You need to be logged in to leave comments. Login now