Show More
@@ -24,7 +24,6 b' from mercurial import (' | |||
|
24 | 24 | |
|
25 | 25 | from . import ( |
|
26 | 26 | narrowbundle2, |
|
27 | narrowchangegroup, | |
|
28 | 27 | narrowcommands, |
|
29 | 28 | narrowcopies, |
|
30 | 29 | narrowpatch, |
@@ -62,7 +61,6 b' def uisetup(ui):' | |||
|
62 | 61 | narrowrevlog.setup() |
|
63 | 62 | narrowbundle2.setup() |
|
64 | 63 | narrowcommands.setup() |
|
65 | narrowchangegroup.setup() | |
|
66 | 64 | narrowwirepeer.uisetup() |
|
67 | 65 | |
|
68 | 66 | def reposetup(ui, repo): |
@@ -657,20 +657,52 b' class cg1packer(object):' | |||
|
657 | 657 | clrevorder = {} |
|
658 | 658 | mfs = {} # needed manifests |
|
659 | 659 | fnodes = {} # needed file nodes |
|
660 | mfl = repo.manifestlog | |
|
661 | # TODO violates storage abstraction. | |
|
662 | mfrevlog = mfl._revlog | |
|
660 | 663 | changedfiles = set() |
|
661 | 664 | |
|
662 | # Callback for the changelog, used to collect changed files and manifest | |
|
663 | # nodes. | |
|
665 | ellipsesmode = util.safehasattr(self, 'full_nodes') | |
|
666 | ||
|
667 | # Callback for the changelog, used to collect changed files and | |
|
668 | # manifest nodes. | |
|
664 | 669 | # Returns the linkrev node (identity in the changelog case). |
|
665 | 670 | def lookupcl(x): |
|
666 | 671 | c = cl.read(x) |
|
667 | 672 | clrevorder[x] = len(clrevorder) |
|
668 | n = c[0] | |
|
669 | # record the first changeset introducing this manifest version | |
|
670 | mfs.setdefault(n, x) | |
|
671 | # Record a complete list of potentially-changed files in | |
|
672 | # this manifest. | |
|
673 | changedfiles.update(c[3]) | |
|
673 | ||
|
674 | if ellipsesmode: | |
|
675 | # Only update mfs if x is going to be sent. Otherwise we | |
|
676 | # end up with bogus linkrevs specified for manifests and | |
|
677 | # we skip some manifest nodes that we should otherwise | |
|
678 | # have sent. | |
|
679 | if (x in self.full_nodes | |
|
680 | or cl.rev(x) in self.precomputed_ellipsis): | |
|
681 | n = c[0] | |
|
682 | # Record the first changeset introducing this manifest | |
|
683 | # version. | |
|
684 | mfs.setdefault(n, x) | |
|
685 | # Set this narrow-specific dict so we have the lowest | |
|
686 | # manifest revnum to look up for this cl revnum. (Part of | |
|
687 | # mapping changelog ellipsis parents to manifest ellipsis | |
|
688 | # parents) | |
|
689 | self.next_clrev_to_localrev.setdefault(cl.rev(x), | |
|
690 | mfrevlog.rev(n)) | |
|
691 | # We can't trust the changed files list in the changeset if the | |
|
692 | # client requested a shallow clone. | |
|
693 | if self.is_shallow: | |
|
694 | changedfiles.update(mfl[c[0]].read().keys()) | |
|
695 | else: | |
|
696 | changedfiles.update(c[3]) | |
|
697 | else: | |
|
698 | ||
|
699 | n = c[0] | |
|
700 | # record the first changeset introducing this manifest version | |
|
701 | mfs.setdefault(n, x) | |
|
702 | # Record a complete list of potentially-changed files in | |
|
703 | # this manifest. | |
|
704 | changedfiles.update(c[3]) | |
|
705 | ||
|
674 | 706 | return x |
|
675 | 707 | |
|
676 | 708 | self._verbosenote(_('uncompressed size of bundle content:\n')) |
@@ -705,6 +737,13 b' class cg1packer(object):' | |||
|
705 | 737 | for chunk in self.generatemanifests(commonrevs, clrevorder, |
|
706 | 738 | fastpathlinkrev, mfs, fnodes, source): |
|
707 | 739 | yield chunk |
|
740 | ||
|
741 | if ellipsesmode: | |
|
742 | mfdicts = None | |
|
743 | if self.is_shallow: | |
|
744 | mfdicts = [(self._repo.manifestlog[n].read(), lr) | |
|
745 | for (n, lr) in mfs.iteritems()] | |
|
746 | ||
|
708 | 747 | mfs.clear() |
|
709 | 748 | clrevs = set(cl.rev(x) for x in clnodes) |
|
710 | 749 | |
@@ -719,6 +758,14 b' class cg1packer(object):' | |||
|
719 | 758 | revs = ((r, llr(r)) for r in filerevlog) |
|
720 | 759 | return dict((fln(r), cln(lr)) for r, lr in revs if lr in clrevs) |
|
721 | 760 | |
|
761 | if ellipsesmode: | |
|
762 | # We need to pass the mfdicts variable down into | |
|
763 | # generatefiles(), but more than one command might have | |
|
764 | # wrapped generatefiles so we can't modify the function | |
|
765 | # signature. Instead, we pass the data to ourselves using an | |
|
766 | # instance attribute. I'm sorry. | |
|
767 | self._mfdicts = mfdicts | |
|
768 | ||
|
722 | 769 | for chunk in self.generatefiles(changedfiles, linknodes, commonrevs, |
|
723 | 770 | source): |
|
724 | 771 | yield chunk |
|
1 | NO CONTENT: file was removed |
General Comments 0
You need to be logged in to leave comments.
Login now