Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/localrepo.py @ 5368:61462e7d62ed
changegroup: avoid large copies
- handle chunk headers separately rather than prepending them to
(potentially large) chunks
- break large chunks into 1M pieces for compression
- don't prepend file metadata onto (potentially large) file data
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 03 Oct 2007 17:17:28 -0500 |
parents | 46455285c6b5 |
children | a3df02cd4a35 1b230f506346 |
comparison
equal
deleted
inserted
replaced
5367:7530334bf301 | 5368:61462e7d62ed |
---|---|
1718 else: | 1718 else: |
1719 msng_filenode_lst = [] | 1719 msng_filenode_lst = [] |
1720 # If any filenodes are left, generate the group for them, | 1720 # If any filenodes are left, generate the group for them, |
1721 # otherwise don't bother. | 1721 # otherwise don't bother. |
1722 if len(msng_filenode_lst) > 0: | 1722 if len(msng_filenode_lst) > 0: |
1723 yield changegroup.genchunk(fname) | 1723 yield changegroup.chunkheader(len(fname)) |
1724 yield fname | |
1724 # Sort the filenodes by their revision # | 1725 # Sort the filenodes by their revision # |
1725 msng_filenode_lst.sort(cmp_by_rev_func(filerevlog)) | 1726 msng_filenode_lst.sort(cmp_by_rev_func(filerevlog)) |
1726 # Create a group generator and only pass in a changenode | 1727 # Create a group generator and only pass in a changenode |
1727 # lookup function as we need to collect no information | 1728 # lookup function as we need to collect no information |
1728 # from filenodes. | 1729 # from filenodes. |
1794 for fname in changedfiles: | 1795 for fname in changedfiles: |
1795 filerevlog = self.file(fname) | 1796 filerevlog = self.file(fname) |
1796 nodeiter = gennodelst(filerevlog) | 1797 nodeiter = gennodelst(filerevlog) |
1797 nodeiter = list(nodeiter) | 1798 nodeiter = list(nodeiter) |
1798 if nodeiter: | 1799 if nodeiter: |
1799 yield changegroup.genchunk(fname) | 1800 yield changegroup.chunkheader(len(fname)) |
1801 yield fname | |
1800 lookup = lookuprevlink_func(filerevlog) | 1802 lookup = lookuprevlink_func(filerevlog) |
1801 for chnk in filerevlog.group(nodeiter, lookup): | 1803 for chnk in filerevlog.group(nodeiter, lookup): |
1802 yield chnk | 1804 yield chnk |
1803 | 1805 |
1804 yield changegroup.closechunk() | 1806 yield changegroup.closechunk() |