equal
deleted
inserted
replaced
815 cl = repo.changelog |
815 cl = repo.changelog |
816 |
816 |
817 self._verbosenote(_('uncompressed size of bundle content:\n')) |
817 self._verbosenote(_('uncompressed size of bundle content:\n')) |
818 size = 0 |
818 size = 0 |
819 |
819 |
820 clstate, deltas = self._generatechangelog(cl, clnodes) |
820 clstate, deltas = self._generatechangelog(cl, clnodes, |
|
821 generate=changelog) |
821 for delta in deltas: |
822 for delta in deltas: |
822 if changelog: |
823 for chunk in _revisiondeltatochunks(delta, |
823 for chunk in _revisiondeltatochunks(delta, |
824 self._builddeltaheader): |
824 self._builddeltaheader): |
825 size += len(chunk) |
825 size += len(chunk) |
826 yield chunk |
826 yield chunk |
|
827 |
827 |
828 close = closechunk() |
828 close = closechunk() |
829 size += len(close) |
829 size += len(close) |
830 yield closechunk() |
830 yield closechunk() |
831 |
831 |
915 yield closechunk() |
915 yield closechunk() |
916 |
916 |
917 if clnodes: |
917 if clnodes: |
918 repo.hook('outgoing', node=hex(clnodes[0]), source=source) |
918 repo.hook('outgoing', node=hex(clnodes[0]), source=source) |
919 |
919 |
920 def _generatechangelog(self, cl, nodes): |
920 def _generatechangelog(self, cl, nodes, generate=True): |
921 """Generate data for changelog chunks. |
921 """Generate data for changelog chunks. |
922 |
922 |
923 Returns a 2-tuple of a dict containing state and an iterable of |
923 Returns a 2-tuple of a dict containing state and an iterable of |
924 byte chunks. The state will not be fully populated until the |
924 byte chunks. The state will not be fully populated until the |
925 chunk stream has been fully consumed. |
925 chunk stream has been fully consumed. |
|
926 |
|
927 if generate is False, the state will be fully populated and no chunk |
|
928 stream will be yielded |
926 """ |
929 """ |
927 clrevorder = {} |
930 clrevorder = {} |
928 manifests = {} |
931 manifests = {} |
929 mfl = self._repo.manifestlog |
932 mfl = self._repo.manifestlog |
930 changedfiles = set() |
933 changedfiles = set() |
934 'clrevorder': clrevorder, |
937 'clrevorder': clrevorder, |
935 'manifests': manifests, |
938 'manifests': manifests, |
936 'changedfiles': changedfiles, |
939 'changedfiles': changedfiles, |
937 'clrevtomanifestrev': clrevtomanifestrev, |
940 'clrevtomanifestrev': clrevtomanifestrev, |
938 } |
941 } |
|
942 |
|
943 if not (generate or self._ellipses): |
|
944 # sort the nodes in storage order |
|
945 nodes = sorted(nodes, key=cl.rev) |
|
946 for node in nodes: |
|
947 c = cl.changelogrevision(node) |
|
948 clrevorder[node] = len(clrevorder) |
|
949 # record the first changeset introducing this manifest version |
|
950 manifests.setdefault(c.manifest, node) |
|
951 # Record a complete list of potentially-changed files in |
|
952 # this manifest. |
|
953 changedfiles.update(c.files) |
|
954 |
|
955 return state, () |
939 |
956 |
940 # Callback for the changelog, used to collect changed files and |
957 # Callback for the changelog, used to collect changed files and |
941 # manifest nodes. |
958 # manifest nodes. |
942 # Returns the linkrev node (identity in the changelog case). |
959 # Returns the linkrev node (identity in the changelog case). |
943 def lookupcl(x): |
960 def lookupcl(x): |