Show More
@@ -1510,7 +1510,7 b' class localrepository(repo.repository):' | |||
|
1510 | 1510 | for node in nodes: |
|
1511 | 1511 | self.ui.debug("%s\n" % hex(node)) |
|
1512 | 1512 | |
|
1513 | def changegroupsubset(self, bases, heads, source): | |
|
1513 | def changegroupsubset(self, bases, heads, source, extranodes=None): | |
|
1514 | 1514 | """This function generates a changegroup consisting of all the nodes |
|
1515 | 1515 | that are descendents of any of the bases, and ancestors of any of |
|
1516 | 1516 | the heads. |
@@ -1520,7 +1520,15 b' class localrepository(repo.repository):' | |||
|
1520 | 1520 | is non-trivial. |
|
1521 | 1521 | |
|
1522 | 1522 | Another wrinkle is doing the reverse, figuring out which changeset in |
|
1523 |
the changegroup a particular filenode or manifestnode belongs to. |
|
|
1523 | the changegroup a particular filenode or manifestnode belongs to. | |
|
1524 | ||
|
1525 | The caller can specify some nodes that must be included in the | |
|
1526 | changegroup using the extranodes argument. It should be a dict | |
|
1527 | where the keys are the filenames (or 1 for the manifest), and the | |
|
1528 | values are lists of (node, linknode) tuples, where node is a wanted | |
|
1529 | node and linknode is the changelog node that should be transmitted as | |
|
1530 | the linkrev. | |
|
1531 | """ | |
|
1524 | 1532 | |
|
1525 | 1533 | self.hook('preoutgoing', throw=True, source=source) |
|
1526 | 1534 | |
@@ -1713,6 +1721,15 b' class localrepository(repo.repository):' | |||
|
1713 | 1721 | return msngset[fnode] |
|
1714 | 1722 | return lookup_filenode_link |
|
1715 | 1723 | |
|
1724 | # Add the nodes that were explicitly requested. | |
|
1725 | def add_extra_nodes(name, nodes): | |
|
1726 | if not extranodes or name not in extranodes: | |
|
1727 | return | |
|
1728 | ||
|
1729 | for node, linknode in extranodes[name]: | |
|
1730 | if node not in nodes: | |
|
1731 | nodes[node] = linknode | |
|
1732 | ||
|
1716 | 1733 | # Now that we have all theses utility functions to help out and |
|
1717 | 1734 | # logically divide up the task, generate the group. |
|
1718 | 1735 | def gengroup(): |
@@ -1728,6 +1745,7 b' class localrepository(repo.repository):' | |||
|
1728 | 1745 | # The list of manifests has been collected by the generator |
|
1729 | 1746 | # calling our functions back. |
|
1730 | 1747 | prune_manifests() |
|
1748 | add_extra_nodes(1, msng_mnfst_set) | |
|
1731 | 1749 | msng_mnfst_lst = msng_mnfst_set.keys() |
|
1732 | 1750 | # Sort the manifestnodes by revision number. |
|
1733 | 1751 | msng_mnfst_lst.sort(cmp_by_rev_func(mnfst)) |
@@ -1743,6 +1761,13 b' class localrepository(repo.repository):' | |||
|
1743 | 1761 | msng_mnfst_lst = None |
|
1744 | 1762 | msng_mnfst_set.clear() |
|
1745 | 1763 | |
|
1764 | if extranodes: | |
|
1765 | for fname in extranodes: | |
|
1766 | if isinstance(fname, int): | |
|
1767 | continue | |
|
1768 | add_extra_nodes(fname, | |
|
1769 | msng_filenode_set.setdefault(fname, {})) | |
|
1770 | changedfiles[fname] = 1 | |
|
1746 | 1771 | changedfiles = changedfiles.keys() |
|
1747 | 1772 | changedfiles.sort() |
|
1748 | 1773 | # Go through all our files in order sorted by name. |
General Comments 0
You need to be logged in to leave comments.
Login now