Mercurial > public > mercurial-scm > hg
comparison mercurial/revset.py @ 20739:1b4f2399f3c4
revset: add documentation and comment for _generatorset
(clean up some old irrelevant comment in the process)
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 14 Mar 2014 10:57:04 -0700 |
parents | 33943add5d65 |
children | 6b731b29e154 |
comparison
equal
deleted
inserted
replaced
20738:33943add5d65 | 20739:1b4f2399f3c4 |
---|---|
2552 | 2552 |
2553 This class does not duck-type baseset and it's only supposed to be used | 2553 This class does not duck-type baseset and it's only supposed to be used |
2554 internally | 2554 internally |
2555 """ | 2555 """ |
2556 def __init__(self, gen): | 2556 def __init__(self, gen): |
2557 """ | |
2558 gen: a generator producing the values for the generatorset. | |
2559 """ | |
2557 self._gen = gen | 2560 self._gen = gen |
2558 self._iter = iter(gen) | 2561 self._iter = iter(gen) |
2559 self._cache = {} | 2562 self._cache = {} |
2560 self._genlist = baseset([]) | 2563 self._genlist = baseset([]) |
2561 self._iterated = False | 2564 self._iterated = False |
2563 | 2566 |
2564 def __contains__(self, x): | 2567 def __contains__(self, x): |
2565 if x in self._cache: | 2568 if x in self._cache: |
2566 return self._cache[x] | 2569 return self._cache[x] |
2567 | 2570 |
2571 # Use __iter__ which caches values and stores them into self._genlist | |
2568 for l in self: | 2572 for l in self: |
2569 if l == x: | 2573 if l == x: |
2570 return True | 2574 return True |
2571 | 2575 |
2572 self._finished = True | 2576 self._finished = True |
2573 self._cache[x] = False | 2577 self._cache[x] = False |
2574 return False | 2578 return False |
2575 | 2579 |
2576 def __iter__(self): | 2580 def __iter__(self): |
2577 if self._iterated: | 2581 if self._iterated: |
2582 # At least a part of the list should be cached if iteration has | |
2583 # started over the generatorset. | |
2578 for l in self._genlist: | 2584 for l in self._genlist: |
2579 yield l | 2585 yield l |
2580 else: | 2586 else: |
2587 # Starting iteration over the generatorset. | |
2581 self._iterated = True | 2588 self._iterated = True |
2582 | 2589 |
2583 for item in self._gen: | 2590 for item in self._gen: |
2584 self._cache[item] = True | 2591 self._cache[item] = True |
2585 self._genlist.append(item) | 2592 self._genlist.append(item) |
2586 yield item | 2593 yield item |
2587 | 2594 |
2595 # Iteration over the generator has finished. Whole value list should be | |
2596 # cached in self._genlist | |
2588 self._finished = True | 2597 self._finished = True |
2589 | 2598 |
2590 def set(self): | 2599 def set(self): |
2591 return self | 2600 return self |
2592 | 2601 |
2593 def sort(self, reverse=False): | 2602 def sort(self, reverse=False): |
2594 # Basic implementation to be changed in future patches | |
2595 if not self._finished: | 2603 if not self._finished: |
2596 for i in self: | 2604 for i in self: |
2597 continue | 2605 continue |
2598 self._genlist.sort(reverse=reverse) | 2606 self._genlist.sort(reverse=reverse) |
2599 | 2607 |