Mercurial > public > mercurial-scm > hg
comparison mercurial/localrepo.py @ 13812:2b70683888b9
changegroup: minor ordering and renaming changes for similarity
This eliminates some needless differences between the two changegroup variants
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 31 Mar 2011 09:59:56 -0500 |
parents | 65c1d309ab91 |
children | 76593ef397ef |
comparison
equal
deleted
inserted
replaced
13811:65c1d309ab91 | 13812:2b70683888b9 |
---|---|
1476 | 1476 |
1477 cl = self.changelog | 1477 cl = self.changelog |
1478 mf = self.manifest | 1478 mf = self.manifest |
1479 mfs = {} # needed manifests | 1479 mfs = {} # needed manifests |
1480 fnodes = {} # needed file nodes | 1480 fnodes = {} # needed file nodes |
1481 changedfiles = set() | |
1481 | 1482 |
1482 # can we go through the fast path ? | 1483 # can we go through the fast path ? |
1483 heads.sort() | 1484 heads.sort() |
1484 if heads == sorted(self.heads()): | 1485 if heads == sorted(self.heads()): |
1485 return self._changegroup(csets, source) | 1486 return self._changegroup(csets, source) |
1496 | 1497 |
1497 # Now that we have all theses utility functions to help out and | 1498 # Now that we have all theses utility functions to help out and |
1498 # logically divide up the task, generate the group. | 1499 # logically divide up the task, generate the group. |
1499 def gengroup(): | 1500 def gengroup(): |
1500 # The set of changed files starts empty. | 1501 # The set of changed files starts empty. |
1501 changedfiles = set() | |
1502 | 1502 |
1503 count = [0] | 1503 count = [0] |
1504 def clookup(revlog, x): | 1504 def clookup(revlog, x): |
1505 c = cl.read(x) | 1505 c = cl.read(x) |
1506 changedfiles.update(c[3]) | 1506 changedfiles.update(c[3]) |
1586 This is much easier than the previous function as we can assume that | 1586 This is much easier than the previous function as we can assume that |
1587 the recipient has any changenode we aren't sending them. | 1587 the recipient has any changenode we aren't sending them. |
1588 | 1588 |
1589 nodes is the set of nodes to send""" | 1589 nodes is the set of nodes to send""" |
1590 | 1590 |
1591 cl = self.changelog | |
1592 mf = self.manifest | |
1593 mfs = {} | |
1594 changedfiles = set() | |
1595 | |
1591 self.hook('preoutgoing', throw=True, source=source) | 1596 self.hook('preoutgoing', throw=True, source=source) |
1592 | 1597 self.changegroupinfo(nodes, source) |
1593 cl = self.changelog | 1598 |
1594 revset = set([cl.rev(n) for n in nodes]) | 1599 revset = set([cl.rev(n) for n in nodes]) |
1595 self.changegroupinfo(nodes, source) | |
1596 | 1600 |
1597 def gennodelst(log): | 1601 def gennodelst(log): |
1598 for r in log: | 1602 for r in log: |
1599 if log.linkrev(r) in revset: | 1603 if log.linkrev(r) in revset: |
1600 yield log.node(r) | 1604 yield log.node(r) |
1601 | 1605 |
1602 def gengroup(): | 1606 def gengroup(): |
1603 '''yield a sequence of changegroup chunks (strings)''' | 1607 '''yield a sequence of changegroup chunks (strings)''' |
1604 # construct a list of all changed files | 1608 # construct a list of all changed files |
1605 changedfiles = set() | |
1606 mmfs = {} | |
1607 | 1609 |
1608 count = [0] | 1610 count = [0] |
1609 def clookup(revlog, x): | 1611 def clookup(revlog, x): |
1610 c = cl.read(x) | 1612 c = cl.read(x) |
1611 changedfiles.update(c[3]) | 1613 changedfiles.update(c[3]) |
1612 mmfs.setdefault(c[0], x) | 1614 mfs.setdefault(c[0], x) |
1613 count[0] += 1 | 1615 count[0] += 1 |
1614 self.ui.progress(_('bundling'), count[0], unit=_('changesets')) | 1616 self.ui.progress(_('bundling'), count[0], unit=_('changesets')) |
1615 return x | 1617 return x |
1616 | 1618 |
1617 for chunk in cl.group(nodes, clookup): | 1619 for chunk in cl.group(nodes, clookup): |
1618 yield chunk | 1620 yield chunk |
1619 efiles = len(changedfiles) | 1621 efiles = len(changedfiles) |
1620 changecount = count[0] | 1622 changecount = count[0] |
1621 self.ui.progress(_('bundling'), None) | 1623 self.ui.progress(_('bundling'), None) |
1622 | 1624 |
1623 mnfst = self.manifest | |
1624 count = [0] | 1625 count = [0] |
1625 def mlookup(revlog, x): | 1626 def mlookup(revlog, x): |
1626 count[0] += 1 | 1627 count[0] += 1 |
1627 self.ui.progress(_('bundling'), count[0], | 1628 self.ui.progress(_('bundling'), count[0], |
1628 unit=_('manifests'), total=changecount) | 1629 unit=_('manifests'), total=changecount) |
1629 return cl.node(revlog.linkrev(revlog.rev(x))) | 1630 return cl.node(revlog.linkrev(revlog.rev(x))) |
1630 | 1631 |
1631 for chunk in mnfst.group(gennodelst(mnfst), mlookup): | 1632 for chunk in mf.group(gennodelst(mf), mlookup): |
1632 yield chunk | 1633 yield chunk |
1633 self.ui.progress(_('bundling'), None) | 1634 self.ui.progress(_('bundling'), None) |
1634 | 1635 |
1635 for idx, fname in enumerate(sorted(changedfiles)): | 1636 for idx, fname in enumerate(sorted(changedfiles)): |
1636 filerevlog = self.file(fname) | 1637 filerevlog = self.file(fname) |
1649 break | 1650 break |
1650 yield changegroup.chunkheader(len(fname)) | 1651 yield changegroup.chunkheader(len(fname)) |
1651 yield fname | 1652 yield fname |
1652 first = False | 1653 first = False |
1653 yield chunk | 1654 yield chunk |
1655 yield changegroup.closechunk() | |
1654 self.ui.progress(_('bundling'), None) | 1656 self.ui.progress(_('bundling'), None) |
1655 | |
1656 yield changegroup.closechunk() | |
1657 | 1657 |
1658 if nodes: | 1658 if nodes: |
1659 self.hook('outgoing', node=hex(nodes[0]), source=source) | 1659 self.hook('outgoing', node=hex(nodes[0]), source=source) |
1660 | 1660 |
1661 return changegroup.unbundle10(util.chunkbuffer(gengroup()), 'UN') | 1661 return changegroup.unbundle10(util.chunkbuffer(gengroup()), 'UN') |