equal
deleted
inserted
replaced
44 yield current |
44 yield current |
45 for parent in cl.parentrevs(current)[:cut]: |
45 for parent in cl.parentrevs(current)[:cut]: |
46 if parent != node.nullrev: |
46 if parent != node.nullrev: |
47 heapq.heappush(h, -parent) |
47 heapq.heappush(h, -parent) |
48 |
48 |
49 return _generatorset(iterate(), iterasc=False) |
49 return generatorset(iterate(), iterasc=False) |
50 |
50 |
51 def _revdescendants(repo, revs, followfirst): |
51 def _revdescendants(repo, revs, followfirst): |
52 """Like revlog.descendants() but supports followfirst.""" |
52 """Like revlog.descendants() but supports followfirst.""" |
53 cut = followfirst and 1 or None |
53 cut = followfirst and 1 or None |
54 |
54 |
68 if x != nullrev and x in seen: |
68 if x != nullrev and x in seen: |
69 seen.add(i) |
69 seen.add(i) |
70 yield i |
70 yield i |
71 break |
71 break |
72 |
72 |
73 return _generatorset(iterate(), iterasc=True) |
73 return generatorset(iterate(), iterasc=True) |
74 |
74 |
75 def _revsbetween(repo, roots, heads): |
75 def _revsbetween(repo, roots, heads): |
76 """Return all paths between roots and heads, inclusive of both endpoint |
76 """Return all paths between roots and heads, inclusive of both endpoint |
77 sets.""" |
77 sets.""" |
78 if not roots: |
78 if not roots: |
2511 gen = gen() |
2511 gen = gen() |
2512 else: |
2512 else: |
2513 iter1 = iter(self._r1) |
2513 iter1 = iter(self._r1) |
2514 iter2 = iter(self._r2) |
2514 iter2 = iter(self._r2) |
2515 gen = self._iterordered(self._ascending, iter1, iter2) |
2515 gen = self._iterordered(self._ascending, iter1, iter2) |
2516 self._iter = _generatorset(gen) |
2516 self._iter = generatorset(gen) |
2517 return self._iter |
2517 return self._iter |
2518 |
2518 |
2519 def __iter__(self): |
2519 def __iter__(self): |
2520 if self._genlist: |
2520 if self._genlist: |
2521 return iter(self._genlist) |
2521 return iter(self._genlist) |
2606 def reverse(self): |
2606 def reverse(self): |
2607 self._list.reverse() |
2607 self._list.reverse() |
2608 if self._ascending is not None: |
2608 if self._ascending is not None: |
2609 self._ascending = not self._ascending |
2609 self._ascending = not self._ascending |
2610 |
2610 |
2611 class _generatorset(abstractsmartset): |
2611 class generatorset(abstractsmartset): |
2612 """Wrap a generator for lazy iteration |
2612 """Wrap a generator for lazy iteration |
2613 |
2613 |
2614 Wrapper structure for generators that provides lazy membership and can |
2614 Wrapper structure for generators that provides lazy membership and can |
2615 be iterated more than once. |
2615 be iterated more than once. |
2616 When asked for membership it generates values until either it finds the |
2616 When asked for membership it generates values until either it finds the |
2849 # |
2849 # |
2850 # `other` was used with "&", let's assume this is a set like |
2850 # `other` was used with "&", let's assume this is a set like |
2851 # object. |
2851 # object. |
2852 other = baseset(other - self._hiddenrevs) |
2852 other = baseset(other - self._hiddenrevs) |
2853 elif not util.safehasattr(other, 'ascending'): |
2853 elif not util.safehasattr(other, 'ascending'): |
2854 # "other" is _generatorset not a real smart set |
2854 # "other" is generatorset not a real smart set |
2855 # we fallback to the old way (sad kitten) |
2855 # we fallback to the old way (sad kitten) |
2856 return super(fullreposet, self).__and__(other) |
2856 return super(fullreposet, self).__and__(other) |
2857 |
2857 |
2858 # preserve order: |
2858 # preserve order: |
2859 # |
2859 # |