Mercurial > hg
diff mercurial/smartset.py @ 32818:9ddb18ae342e
smartset: extract spanset factory to make it constructed without a repo
This renames the spanset class to _spanset, and moves its __init__ to new
spanset() function. spanset() is now a factory function.
This allows us to construct a spanset without keeping a repo instance.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 24 May 2015 11:07:14 +0900 |
parents | e962c70c0aad |
children | 4710cc4dac99 |
line wrap: on
line diff
--- a/mercurial/smartset.py Sun Jun 11 00:21:38 2017 +0900 +++ b/mercurial/smartset.py Sun May 24 11:07:14 2015 +0900 @@ -906,7 +906,22 @@ d = {False: '-', True: '+'}[self._ascending] return '<%s%s>' % (type(self).__name__, d) -class spanset(abstractsmartset): +def spanset(repo, start=0, end=None): + """Create a spanset that represents a range of repository revisions + + start: first revision included the set (default to 0) + end: first revision excluded (last+1) (default to len(repo)) + + Spanset will be descending if `end` < `start`. + """ + if end is None: + end = len(repo) + ascending = start <= end + if not ascending: + start, end = end + 1, start + 1 + return _spanset(start, end, ascending, repo.changelog.filteredrevs) + +class _spanset(abstractsmartset): """Duck type for baseset class which represents a range of revisions and can work lazily and without having all the range in memory @@ -916,23 +931,11 @@ - revision filtered with this repoview will be skipped. """ - def __init__(self, repo, start=0, end=None): - """ - start: first revision included the set - (default to 0) - end: first revision excluded (last+1) - (default to len(repo) - - Spanset will be descending if `end` < `start`. - """ - if end is None: - end = len(repo) - self._ascending = start <= end - if not self._ascending: - start, end = end + 1, start +1 + def __init__(self, start, end, ascending, hiddenrevs): self._start = start self._end = end - self._hiddenrevs = repo.changelog.filteredrevs + self._ascending = ascending + self._hiddenrevs = hiddenrevs def sort(self, reverse=False): self._ascending = not reverse @@ -1020,10 +1023,10 @@ def __repr__(self): d = {False: '-', True: '+'}[self._ascending] - return '<%s%s %d:%d>' % (type(self).__name__, d, + return '<%s%s %d:%d>' % (type(self).__name__.lstrip('_'), d, self._start, self._end) -class fullreposet(spanset): +class fullreposet(_spanset): """a set containing all revisions in the repo This class exists to host special optimization and magic to handle virtual @@ -1031,7 +1034,8 @@ """ def __init__(self, repo): - super(fullreposet, self).__init__(repo) + super(fullreposet, self).__init__(0, len(repo), True, + repo.changelog.filteredrevs) def __and__(self, other): """As self contains the whole repo, all of the other set should also be