[PATCH] revset: fix iteration over ordered addset composed of non-ordered operant
Yuya Nishihara
yuya at tcha.org
Fri May 15 07:38:42 CDT 2015
On Fri, 15 May 2015 01:29:25 -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1431674743 25200
> # Fri May 15 00:25:43 2015 -0700
> # Node ID c1b2704abcd0dd81c7f29d1fc21e017665e0941c
> # Parent d1bd0fd07ee6adf4ab3be2b0a0a7c0df54d55abf
> revset: fix iteration over ordered addset composed of non-ordered operant
>
> Before this change, doing ordered iteration over an 'addset' object composed of
> operant without fastasc or fastdesc method could result into duplicated entry.
> This was the result of applying '_iterordered' on non ordered set.
>
> We fix it by ensuring we iterate over the set in a sorted order. Using the fast
> iterator when it exists on any operand. We kill the '_iterator' method in the
> process because it did not made a lot of sense independently.
[...]
> + # try to use our own fast iterator if it exists
> self._trysetasclist()
> if self._ascending:
> it = self.fastasc
> else:
> it = self.fastdesc
> - if it is None:
> - # consume the gen and try again
> - self._list
> - return iter(self)
> - return it()
> + if it is not None:
> + return it()
> + # maybe half of the component supports fast
> + attr = 'fastdesc'
> + if self._ascending:
> + attr = 'fastasc'
> + # get iterator for _r1
> + iter1 = getattr(self._r1, attr)
> + if iter1 is None:
> + # let's avoid side effect (not sure it matters)
> + iter1 = iter(sorted(self._r1, reverse=not self._ascending))
> + else:
> + iter1 = iter1()
> + # get iterator for _r2
> + iter2 = getattr(self._r2, attr)
> + if iter2 is None:
> + # let's avoid side effect (not sure it matters)
> + iter2 = iter(sorted(self._r2, reverse=not self._ascending))
> + else:
> + iter2 = iter2()
> + return self._iterordered(self._ascending, iter1, iter2)
LGTM, thanks for fixing it.
Can you pick "[PATCH 4 of 6] revset: drop redundant filteredset from right-hand
side set of "or" operation" from my previous series? I think it's okay.
I'll rewrite the other patches.
Regards,
More information about the Mercurial-devel
mailing list