Mercurial > hg
comparison mercurial/localrepo.py @ 10011:a9836feb5a8c
changegroupsubset: readdelta() can be used if the previous rev is a parent
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Fri, 04 Dec 2009 17:43:01 +0100 |
parents | 2fce96916d97 |
children | 24ce8f0c0a39 |
comparison
equal
deleted
inserted
replaced
10010:2fce96916d97 | 10011:a9836feb5a8c |
---|---|
1752 return msng_mnfst_set[mnfstnode] | 1752 return msng_mnfst_set[mnfstnode] |
1753 | 1753 |
1754 # A function generating function that sets up the initial environment | 1754 # A function generating function that sets up the initial environment |
1755 # the inner function. | 1755 # the inner function. |
1756 def filenode_collector(changedfiles): | 1756 def filenode_collector(changedfiles): |
1757 next_rev = [0] | |
1758 # This gathers information from each manifestnode included in the | 1757 # This gathers information from each manifestnode included in the |
1759 # changegroup about which filenodes the manifest node references | 1758 # changegroup about which filenodes the manifest node references |
1760 # so we can include those in the changegroup too. | 1759 # so we can include those in the changegroup too. |
1761 # | 1760 # |
1762 # It also remembers which changenode each filenode belongs to. It | 1761 # It also remembers which changenode each filenode belongs to. It |
1763 # does this by assuming the a filenode belongs to the changenode | 1762 # does this by assuming the a filenode belongs to the changenode |
1764 # the first manifest that references it belongs to. | 1763 # the first manifest that references it belongs to. |
1765 def collect_msng_filenodes(mnfstnode): | 1764 def collect_msng_filenodes(mnfstnode): |
1766 r = mnfst.rev(mnfstnode) | 1765 r = mnfst.rev(mnfstnode) |
1767 if r == next_rev[0]: | 1766 if r - 1 in mnfst.parentrevs(r): |
1768 # If the last rev we looked at was the one just previous, | 1767 # If the previous rev is one of the parents, |
1769 # we only need to see a diff. | 1768 # we only need to see a diff. |
1770 deltamf = mnfst.readdelta(mnfstnode) | 1769 deltamf = mnfst.readdelta(mnfstnode) |
1771 # For each line in the delta | 1770 # For each line in the delta |
1772 for f, fnode in deltamf.iteritems(): | 1771 for f, fnode in deltamf.iteritems(): |
1773 f = changedfiles.get(f, None) | 1772 f = changedfiles.get(f, None) |
1792 if fnode is not None: | 1791 if fnode is not None: |
1793 # See comments above. | 1792 # See comments above. |
1794 clnode = msng_mnfst_set[mnfstnode] | 1793 clnode = msng_mnfst_set[mnfstnode] |
1795 ndset = msng_filenode_set.setdefault(f, {}) | 1794 ndset = msng_filenode_set.setdefault(f, {}) |
1796 ndset.setdefault(fnode, clnode) | 1795 ndset.setdefault(fnode, clnode) |
1797 # Remember the revision we hope to see next. | |
1798 next_rev[0] = r + 1 | |
1799 return collect_msng_filenodes | 1796 return collect_msng_filenodes |
1800 | 1797 |
1801 # We have a list of filenodes we think we need for a file, lets remove | 1798 # We have a list of filenodes we think we need for a file, lets remove |
1802 # all those we know the recipient must have. | 1799 # all those we know the recipient must have. |
1803 def prune_filenodes(f, filerevlog): | 1800 def prune_filenodes(f, filerevlog): |