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