mercurial/revset.py
changeset 22795 c21342159fad
parent 22794 4aa1bfb54f43
child 22796 43f664bf2e1e
equal deleted inserted replaced
22794:4aa1bfb54f43 22795:c21342159fad
    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         #