Show More
@@ -1479,6 +1479,7 b' class localrepository(repo.repository):' | |||||
1479 | mfs = {} # needed manifests |
|
1479 | mfs = {} # needed manifests | |
1480 | fnodes = {} # needed file nodes |
|
1480 | fnodes = {} # needed file nodes | |
1481 | changedfiles = set() |
|
1481 | changedfiles = set() | |
|
1482 | fstate = ['', {}] | |||
1482 | count = [0] |
|
1483 | count = [0] | |
1483 |
|
1484 | |||
1484 | # can we go through the fast path ? |
|
1485 | # can we go through the fast path ? | |
@@ -1515,6 +1516,12 b' class localrepository(repo.repository):' | |||||
1515 | unit=_('manifests'), total=len(mfs)) |
|
1516 | unit=_('manifests'), total=len(mfs)) | |
1516 | return mfs[x] |
|
1517 | return mfs[x] | |
1517 |
|
1518 | |||
|
1519 | def flookup(revlog, x): | |||
|
1520 | self.ui.progress( | |||
|
1521 | _('bundling'), count[0], item=fstate[0], | |||
|
1522 | unit=_('files'), total=len(changedfiles)) | |||
|
1523 | return fstate[1][x] | |||
|
1524 | ||||
1518 | # Now that we have all theses utility functions to help out and |
|
1525 | # Now that we have all theses utility functions to help out and | |
1519 | # logically divide up the task, generate the group. |
|
1526 | # logically divide up the task, generate the group. | |
1520 | def gengroup(): |
|
1527 | def gengroup(): | |
@@ -1522,7 +1529,6 b' class localrepository(repo.repository):' | |||||
1522 | # back to lookup the owning changenode and collect information. |
|
1529 | # back to lookup the owning changenode and collect information. | |
1523 | for chunk in cl.group(csets, clookup): |
|
1530 | for chunk in cl.group(csets, clookup): | |
1524 | yield chunk |
|
1531 | yield chunk | |
1525 | efiles = len(changedfiles) |
|
|||
1526 | self.ui.progress(_('bundling'), None) |
|
1532 | self.ui.progress(_('bundling'), None) | |
1527 |
|
1533 | |||
1528 | # Create a generator for the manifestnodes that calls our lookup |
|
1534 | # Create a generator for the manifestnodes that calls our lookup | |
@@ -1535,29 +1541,21 b' class localrepository(repo.repository):' | |||||
1535 | mfs.clear() |
|
1541 | mfs.clear() | |
1536 |
|
1542 | |||
1537 | # Go through all our files in order sorted by name. |
|
1543 | # Go through all our files in order sorted by name. | |
1538 | for idx, fname in enumerate(sorted(changedfiles)): |
|
1544 | count[0] = 0 | |
|
1545 | for fname in sorted(changedfiles): | |||
1539 | filerevlog = self.file(fname) |
|
1546 | filerevlog = self.file(fname) | |
1540 | if not len(filerevlog): |
|
1547 | if not len(filerevlog): | |
1541 | raise util.Abort(_("empty or missing revlog for %s") % fname) |
|
1548 | raise util.Abort(_("empty or missing revlog for %s") % fname) | |
1542 | # Toss out the filenodes that the recipient isn't really |
|
1549 | fstate[0] = fname | |
1543 | # missing. |
|
1550 | fstate[1] = fnodes.pop(fname, {}) | |
1544 | missingfnodes = fnodes.pop(fname, {}) |
|
|||
1545 | first = True |
|
1551 | first = True | |
1546 |
|
1552 | |||
1547 | def flookup(revlog, x): |
|
1553 | for chunk in filerevlog.group(prune(filerevlog, fstate[1]), | |
1548 | # even though we print the same progress on |
|
|||
1549 | # most loop iterations, put the progress call |
|
|||
1550 | # here so that time estimates (if any) can be updated |
|
|||
1551 | self.ui.progress( |
|
|||
1552 | _('bundling'), idx, item=fname, |
|
|||
1553 | unit=_('files'), total=efiles) |
|
|||
1554 | return missingfnodes[x] |
|
|||
1555 |
|
||||
1556 | for chunk in filerevlog.group(prune(filerevlog, missingfnodes), |
|
|||
1557 | flookup): |
|
1554 | flookup): | |
1558 | if first: |
|
1555 | if first: | |
1559 | if chunk == changegroup.closechunk(): |
|
1556 | if chunk == changegroup.closechunk(): | |
1560 | break |
|
1557 | break | |
|
1558 | count[0] += 1 | |||
1561 | yield changegroup.chunkheader(len(fname)) |
|
1559 | yield changegroup.chunkheader(len(fname)) | |
1562 | yield fname |
|
1560 | yield fname | |
1563 | first = False |
|
1561 | first = False | |
@@ -1589,6 +1587,8 b' class localrepository(repo.repository):' | |||||
1589 | mf = self.manifest |
|
1587 | mf = self.manifest | |
1590 | mfs = {} |
|
1588 | mfs = {} | |
1591 | changedfiles = set() |
|
1589 | changedfiles = set() | |
|
1590 | fstate = [''] | |||
|
1591 | count = [0] | |||
1592 |
|
1592 | |||
1593 | self.hook('preoutgoing', throw=True, source=source) |
|
1593 | self.hook('preoutgoing', throw=True, source=source) | |
1594 | self.changegroupinfo(nodes, source) |
|
1594 | self.changegroupinfo(nodes, source) | |
@@ -1600,11 +1600,6 b' class localrepository(repo.repository):' | |||||
1600 | if log.linkrev(r) in revset: |
|
1600 | if log.linkrev(r) in revset: | |
1601 | yield log.node(r) |
|
1601 | yield log.node(r) | |
1602 |
|
1602 | |||
1603 | def gengroup(): |
|
|||
1604 | '''yield a sequence of changegroup chunks (strings)''' |
|
|||
1605 | # construct a list of all changed files |
|
|||
1606 |
|
||||
1607 | count = [0] |
|
|||
1608 |
|
|
1603 | def clookup(revlog, x): | |
1609 |
|
|
1604 | c = cl.read(x) | |
1610 |
|
|
1605 | changedfiles.update(c[3]) | |
@@ -1613,38 +1608,43 b' class localrepository(repo.repository):' | |||||
1613 |
|
|
1608 | self.ui.progress(_('bundling'), count[0], unit=_('changesets')) | |
1614 |
|
|
1609 | return x | |
1615 |
|
1610 | |||
1616 | for chunk in cl.group(nodes, clookup): |
|
|||
1617 | yield chunk |
|
|||
1618 | efiles = len(changedfiles) |
|
|||
1619 | changecount = count[0] |
|
|||
1620 | self.ui.progress(_('bundling'), None) |
|
|||
1621 |
|
||||
1622 | count = [0] |
|
|||
1623 |
|
|
1611 | def mlookup(revlog, x): | |
1624 |
|
|
1612 | count[0] += 1 | |
1625 |
|
|
1613 | self.ui.progress(_('bundling'), count[0], | |
1626 |
|
|
1614 | unit=_('manifests'), total=len(mfs)) | |
|
1615 | return cl.node(revlog.linkrev(revlog.rev(x))) | |||
|
1616 | ||||
|
1617 | def flookup(revlog, x): | |||
|
1618 | self.ui.progress( | |||
|
1619 | _('bundling'), count[0], item=fstate[0], | |||
|
1620 | total=len(changedfiles), unit=_('files')) | |||
1627 |
|
|
1621 | return cl.node(revlog.linkrev(revlog.rev(x))) | |
1628 |
|
1622 | |||
|
1623 | def gengroup(): | |||
|
1624 | '''yield a sequence of changegroup chunks (strings)''' | |||
|
1625 | # construct a list of all changed files | |||
|
1626 | ||||
|
1627 | for chunk in cl.group(nodes, clookup): | |||
|
1628 | yield chunk | |||
|
1629 | self.ui.progress(_('bundling'), None) | |||
|
1630 | ||||
|
1631 | count[0] = 0 | |||
1629 | for chunk in mf.group(gennodelst(mf), mlookup): |
|
1632 | for chunk in mf.group(gennodelst(mf), mlookup): | |
1630 | yield chunk |
|
1633 | yield chunk | |
1631 | self.ui.progress(_('bundling'), None) |
|
1634 | self.ui.progress(_('bundling'), None) | |
1632 |
|
1635 | |||
1633 | for idx, fname in enumerate(sorted(changedfiles)): |
|
1636 | count[0] = 0 | |
|
1637 | for fname in sorted(changedfiles): | |||
1634 | filerevlog = self.file(fname) |
|
1638 | filerevlog = self.file(fname) | |
1635 | if not len(filerevlog): |
|
1639 | if not len(filerevlog): | |
1636 | raise util.Abort(_("empty or missing revlog for %s") % fname) |
|
1640 | raise util.Abort(_("empty or missing revlog for %s") % fname) | |
|
1641 | fstate[0] = fname | |||
1637 | first = True |
|
1642 | first = True | |
1638 | def flookup(revlog, x): |
|
|||
1639 | self.ui.progress( |
|
|||
1640 | _('bundling'), idx, item=fname, |
|
|||
1641 | total=efiles, unit=_('files')) |
|
|||
1642 | return cl.node(revlog.linkrev(revlog.rev(x))) |
|
|||
1643 |
|
||||
1644 | for chunk in filerevlog.group(gennodelst(filerevlog), flookup): |
|
1643 | for chunk in filerevlog.group(gennodelst(filerevlog), flookup): | |
1645 | if first: |
|
1644 | if first: | |
1646 | if chunk == changegroup.closechunk(): |
|
1645 | if chunk == changegroup.closechunk(): | |
1647 | break |
|
1646 | break | |
|
1647 | count[0] += 1 | |||
1648 | yield changegroup.chunkheader(len(fname)) |
|
1648 | yield changegroup.chunkheader(len(fname)) | |
1649 | yield fname |
|
1649 | yield fname | |
1650 | first = False |
|
1650 | first = False |
General Comments 0
You need to be logged in to leave comments.
Login now