Mercurial > hg
comparison mercurial/localrepo.py @ 13831:d69c9510d648
changegroup: introduce bundler objects
This makes the bundler pluggable at lower levels.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 31 Mar 2011 15:24:06 -0500 |
parents | 2dc6e09f2a7d |
children | e6bd5b403de0 |
comparison
equal
deleted
inserted
replaced
13830:2dc6e09f2a7d | 13831:d69c9510d648 |
---|---|
1519 self.ui.progress( | 1519 self.ui.progress( |
1520 _('bundling'), count[0], item=fstate[0], | 1520 _('bundling'), count[0], item=fstate[0], |
1521 unit=_('files'), total=len(changedfiles)) | 1521 unit=_('files'), total=len(changedfiles)) |
1522 return fstate[1][x] | 1522 return fstate[1][x] |
1523 | 1523 |
1524 # Now that we have all theses utility functions to help out and | 1524 bundler = changegroup.bundle10(lookup) |
1525 # logically divide up the task, generate the group. | 1525 |
1526 def gengroup(): | 1526 def gengroup(): |
1527 # Create a changenode group generator that will call our functions | 1527 # Create a changenode group generator that will call our functions |
1528 # back to lookup the owning changenode and collect information. | 1528 # back to lookup the owning changenode and collect information. |
1529 for chunk in cl.group(csets, lookup): | 1529 for chunk in cl.group(csets, bundler): |
1530 yield chunk | 1530 yield chunk |
1531 self.ui.progress(_('bundling'), None) | 1531 self.ui.progress(_('bundling'), None) |
1532 | 1532 |
1533 # Create a generator for the manifestnodes that calls our lookup | 1533 # Create a generator for the manifestnodes that calls our lookup |
1534 # and data collection functions back. | 1534 # and data collection functions back. |
1535 count[0] = 0 | 1535 count[0] = 0 |
1536 for chunk in mf.group(prune(mf, mfs), lookup): | 1536 for chunk in mf.group(prune(mf, mfs), bundler): |
1537 yield chunk | 1537 yield chunk |
1538 self.ui.progress(_('bundling'), None) | 1538 self.ui.progress(_('bundling'), None) |
1539 | 1539 |
1540 mfs.clear() | 1540 mfs.clear() |
1541 | 1541 |
1548 fstate[0] = fname | 1548 fstate[0] = fname |
1549 fstate[1] = fnodes.pop(fname, {}) | 1549 fstate[1] = fnodes.pop(fname, {}) |
1550 first = True | 1550 first = True |
1551 | 1551 |
1552 for chunk in filerevlog.group(prune(filerevlog, fstate[1]), | 1552 for chunk in filerevlog.group(prune(filerevlog, fstate[1]), |
1553 lookup): | 1553 bundler): |
1554 if first: | 1554 if first: |
1555 if chunk == changegroup.closechunk(): | 1555 if chunk == bundler.close(): |
1556 break | 1556 break |
1557 count[0] += 1 | 1557 count[0] += 1 |
1558 yield changegroup.chunkheader(len(fname)) | 1558 yield bundler.fileheader(fname) |
1559 yield fname | |
1560 first = False | 1559 first = False |
1561 yield chunk | 1560 yield chunk |
1562 # Signal that no more groups are left. | 1561 # Signal that no more groups are left. |
1563 yield changegroup.closechunk() | 1562 yield bundler.close() |
1564 self.ui.progress(_('bundling'), None) | 1563 self.ui.progress(_('bundling'), None) |
1565 | 1564 |
1566 if csets: | 1565 if csets: |
1567 self.hook('outgoing', node=hex(csets[0]), source=source) | 1566 self.hook('outgoing', node=hex(csets[0]), source=source) |
1568 | 1567 |
1616 self.ui.progress( | 1615 self.ui.progress( |
1617 _('bundling'), count[0], item=fstate[0], | 1616 _('bundling'), count[0], item=fstate[0], |
1618 total=len(changedfiles), unit=_('files')) | 1617 total=len(changedfiles), unit=_('files')) |
1619 return cl.node(revlog.linkrev(revlog.rev(x))) | 1618 return cl.node(revlog.linkrev(revlog.rev(x))) |
1620 | 1619 |
1620 bundler = changegroup.bundle10(lookup) | |
1621 | |
1621 def gengroup(): | 1622 def gengroup(): |
1622 '''yield a sequence of changegroup chunks (strings)''' | 1623 '''yield a sequence of changegroup chunks (strings)''' |
1623 # construct a list of all changed files | 1624 # construct a list of all changed files |
1624 | 1625 |
1625 for chunk in cl.group(nodes, lookup): | 1626 for chunk in cl.group(nodes, bundler): |
1626 yield chunk | 1627 yield chunk |
1627 self.ui.progress(_('bundling'), None) | 1628 self.ui.progress(_('bundling'), None) |
1628 | 1629 |
1629 count[0] = 0 | 1630 count[0] = 0 |
1630 for chunk in mf.group(gennodelst(mf), lookup): | 1631 for chunk in mf.group(gennodelst(mf), bundler): |
1631 yield chunk | 1632 yield chunk |
1632 self.ui.progress(_('bundling'), None) | 1633 self.ui.progress(_('bundling'), None) |
1633 | 1634 |
1634 count[0] = 0 | 1635 count[0] = 0 |
1635 for fname in sorted(changedfiles): | 1636 for fname in sorted(changedfiles): |
1636 filerevlog = self.file(fname) | 1637 filerevlog = self.file(fname) |
1637 if not len(filerevlog): | 1638 if not len(filerevlog): |
1638 raise util.Abort(_("empty or missing revlog for %s") % fname) | 1639 raise util.Abort(_("empty or missing revlog for %s") % fname) |
1639 fstate[0] = fname | 1640 fstate[0] = fname |
1640 first = True | 1641 first = True |
1641 for chunk in filerevlog.group(gennodelst(filerevlog), lookup): | 1642 for chunk in filerevlog.group(gennodelst(filerevlog), bundler): |
1642 if first: | 1643 if first: |
1643 if chunk == changegroup.closechunk(): | 1644 if chunk == bundler.close(): |
1644 break | 1645 break |
1645 count[0] += 1 | 1646 count[0] += 1 |
1646 yield changegroup.chunkheader(len(fname)) | 1647 yield bundler.fileheader(fname) |
1647 yield fname | |
1648 first = False | 1648 first = False |
1649 yield chunk | 1649 yield chunk |
1650 yield changegroup.closechunk() | 1650 yield bundler.close() |
1651 self.ui.progress(_('bundling'), None) | 1651 self.ui.progress(_('bundling'), None) |
1652 | 1652 |
1653 if nodes: | 1653 if nodes: |
1654 self.hook('outgoing', node=hex(nodes[0]), source=source) | 1654 self.hook('outgoing', node=hex(nodes[0]), source=source) |
1655 | 1655 |