##// END OF EJS Templates
revset: improve performance of _generatorset.__contains__ (issue 4201)...
revset: improve performance of _generatorset.__contains__ (issue 4201) _generatorset.__contains__ and __contains__ from child classes were calling into __iter__ to look for values. Since all previously-encountered values from the generator were cached and checked in __contains__ before this iteration, __contains__ was effectively performing iteration busy work which could lead to an explosion of redundant work. This patch changes __contains__ to be more intelligent. Instead of looking at all values via __iter__, __contains__ will instead go straight to "new" values from the underlying generator. On a clone of the Firefox repository with around 200,000 changesets, this patch decreases the execution time of the revset '::(200067)::' from ~100s to ~4s on the author's machine. Rebase operations (which use the aforementioned revset), speed up accordingly.

File last commit:

r18045:add2f9dd default
r20828:3210b793 default
Show More
map
15 lines | 450 B | text/plain | TextLexer
default = 'changelog'
feedupdated = '<updated>{date|rfc3339date}</updated>'
mimetype = 'application/atom+xml; charset={encoding}'
header = header.tmpl
changelog = changelog.tmpl
changelogentry = changelogentry.tmpl
filelog = filelog.tmpl
filelogentry = filelogentry.tmpl
tags = tags.tmpl
tagentry = tagentry.tmpl
bookmarks = bookmarks.tmpl
bookmarkentry = bookmarkentry.tmpl
branches = branches.tmpl
branchentry = branchentry.tmpl
error = error.tmpl