Show More
@@ -1788,7 +1788,7 b' def _addpartsfromopts(ui, repo, bundler,' | |||||
1788 | addpartrevbranchcache(repo, bundler, outgoing) |
|
1788 | addpartrevbranchcache(repo, bundler, outgoing) | |
1789 |
|
1789 | |||
1790 | if opts.get(b'obsolescence', False): |
|
1790 | if opts.get(b'obsolescence', False): | |
1791 | obsmarkers = repo.obsstore.relevantmarkers(outgoing.missing) |
|
1791 | obsmarkers = repo.obsstore.relevantmarkers(nodes=outgoing.missing) | |
1792 | buildobsmarkerspart( |
|
1792 | buildobsmarkerspart( | |
1793 | bundler, |
|
1793 | bundler, | |
1794 | obsmarkers, |
|
1794 | obsmarkers, |
@@ -703,8 +703,8 b' def _pushdiscoveryobsmarkers(pushop):' | |||||
703 | repo = pushop.repo |
|
703 | repo = pushop.repo | |
704 | # very naive computation, that can be quite expensive on big repo. |
|
704 | # very naive computation, that can be quite expensive on big repo. | |
705 | # However: evolution is currently slow on them anyway. |
|
705 | # However: evolution is currently slow on them anyway. | |
706 |
|
|
706 | repo.revs(b'::%ln', pushop.futureheads) | |
707 |
pushop.outobsmarkers = pushop.repo.obsstore.relevantmarkers( |
|
707 | pushop.outobsmarkers = pushop.repo.obsstore.relevantmarkers(revs=revs) | |
708 |
|
708 | |||
709 |
|
709 | |||
710 | @pushdiscovery(b'bookmarks') |
|
710 | @pushdiscovery(b'bookmarks') | |
@@ -2603,10 +2603,15 b' def _getbundleobsmarkerpart(' | |||||
2603 | ): |
|
2603 | ): | |
2604 | """add an obsolescence markers part to the requested bundle""" |
|
2604 | """add an obsolescence markers part to the requested bundle""" | |
2605 | if kwargs.get('obsmarkers', False): |
|
2605 | if kwargs.get('obsmarkers', False): | |
|
2606 | unfi_cl = repo.unfiltered().changelog | |||
2606 | if heads is None: |
|
2607 | if heads is None: | |
2607 | heads = repo.heads() |
|
2608 | headrevs = repo.changelog.headrevs() | |
2608 | subset = [c.node() for c in repo.set(b'::%ln', heads)] |
|
2609 | else: | |
2609 | markers = repo.obsstore.relevantmarkers(subset) |
|
2610 | get_rev = unfi_cl.index.get_rev | |
|
2611 | headrevs = [get_rev(node) for node in heads] | |||
|
2612 | headrevs = [rev for rev in headrevs if rev is not None] | |||
|
2613 | revs = unfi_cl.ancestors(headrevs, inclusive=True) | |||
|
2614 | markers = repo.obsstore.relevantmarkers(revs=revs) | |||
2610 | markers = obsutil.sortedmarkers(markers) |
|
2615 | markers = obsutil.sortedmarkers(markers) | |
2611 | bundle2.buildobsmarkerspart(bundler, markers) |
|
2616 | bundle2.buildobsmarkerspart(bundler, markers) | |
2612 |
|
2617 |
@@ -771,10 +771,11 b' class obsstore:' | |||||
771 | _addchildren(self.children, markers) |
|
771 | _addchildren(self.children, markers) | |
772 | _checkinvalidmarkers(self.repo, markers) |
|
772 | _checkinvalidmarkers(self.repo, markers) | |
773 |
|
773 | |||
774 | def relevantmarkers(self, nodes): |
|
774 | def relevantmarkers(self, nodes=None, revs=None): | |
775 |
"""return a set of all obsolescence markers relevant to a set of |
|
775 | """return a set of all obsolescence markers relevant to a set of | |
|
776 | nodes or revisions. | |||
776 |
|
777 | |||
777 | "relevant" to a set of nodes mean: |
|
778 | "relevant" to a set of nodes or revisions mean: | |
778 |
|
779 | |||
779 | - marker that use this changeset as successor |
|
780 | - marker that use this changeset as successor | |
780 | - prune marker of direct children on this changeset |
|
781 | - prune marker of direct children on this changeset | |
@@ -782,13 +783,33 b' class obsstore:' | |||||
782 | markers |
|
783 | markers | |
783 |
|
784 | |||
784 | It is a set so you cannot rely on order.""" |
|
785 | It is a set so you cannot rely on order.""" | |
|
786 | if nodes is None: | |||
|
787 | nodes = set() | |||
|
788 | if revs is None: | |||
|
789 | revs = set() | |||
785 |
|
790 | |||
786 | pendingnodes = set(nodes) |
|
791 | tonode = self.repo.unfiltered().changelog.node | |
787 |
|
|
792 | pendingnodes = set() | |
788 | seennodes = set(pendingnodes) |
|
|||
789 | precursorsmarkers = self.predecessors |
|
793 | precursorsmarkers = self.predecessors | |
790 | succsmarkers = self.successors |
|
794 | succsmarkers = self.successors | |
791 | children = self.children |
|
795 | children = self.children | |
|
796 | for node in nodes: | |||
|
797 | if ( | |||
|
798 | node in precursorsmarkers | |||
|
799 | or node in succsmarkers | |||
|
800 | or node in children | |||
|
801 | ): | |||
|
802 | pendingnodes.add(node) | |||
|
803 | for rev in revs: | |||
|
804 | node = tonode(rev) | |||
|
805 | if ( | |||
|
806 | node in precursorsmarkers | |||
|
807 | or node in succsmarkers | |||
|
808 | or node in children | |||
|
809 | ): | |||
|
810 | pendingnodes.add(node) | |||
|
811 | seenmarkers = set() | |||
|
812 | seennodes = pendingnodes.copy() | |||
792 | while pendingnodes: |
|
813 | while pendingnodes: | |
793 | direct = set() |
|
814 | direct = set() | |
794 | for current in pendingnodes: |
|
815 | for current in pendingnodes: |
@@ -108,7 +108,7 b' def getmarkers(repo, nodes=None, exclusi' | |||||
108 | elif exclusive: |
|
108 | elif exclusive: | |
109 | rawmarkers = exclusivemarkers(repo, nodes) |
|
109 | rawmarkers = exclusivemarkers(repo, nodes) | |
110 | else: |
|
110 | else: | |
111 | rawmarkers = repo.obsstore.relevantmarkers(nodes) |
|
111 | rawmarkers = repo.obsstore.relevantmarkers(nodes=nodes) | |
112 |
|
112 | |||
113 | for markerdata in rawmarkers: |
|
113 | for markerdata in rawmarkers: | |
114 | yield marker(repo, markerdata) |
|
114 | yield marker(repo, markerdata) |
General Comments 0
You need to be logged in to leave comments.
Login now