Mercurial > hg
changeset 31697:992882cef7e1
fileset: perform membership test against set for status queries
Previously, fileset functions operating on status items performed
membership tests against a list of items. When there are thousands
of items having a specific status, that test can be extremely
slow. Changing the membership test to a set makes this operation
substantially faster.
On the mozilla-central repo:
$ hg files -r d14cac631ecc 'set:added()'
before: 28.120s
after: 0.860s
$ hg status --change d14cac631ecc --added
0.690s
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Tue, 28 Mar 2017 14:40:13 -0700 |
parents | 9d3d56aa1a9f |
children | 9b3577796291 |
files | mercurial/fileset.py |
diffstat | 1 files changed, 8 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/fileset.py Tue Mar 28 10:21:38 2017 -0700 +++ b/mercurial/fileset.py Tue Mar 28 14:40:13 2017 -0700 @@ -154,7 +154,7 @@ """ # i18n: "modified" is a keyword getargs(x, 0, 0, _("modified takes no arguments")) - s = mctx.status().modified + s = set(mctx.status().modified) return [f for f in mctx.subset if f in s] @predicate('added()', callstatus=True) @@ -163,7 +163,7 @@ """ # i18n: "added" is a keyword getargs(x, 0, 0, _("added takes no arguments")) - s = mctx.status().added + s = set(mctx.status().added) return [f for f in mctx.subset if f in s] @predicate('removed()', callstatus=True) @@ -172,7 +172,7 @@ """ # i18n: "removed" is a keyword getargs(x, 0, 0, _("removed takes no arguments")) - s = mctx.status().removed + s = set(mctx.status().removed) return [f for f in mctx.subset if f in s] @predicate('deleted()', callstatus=True) @@ -181,7 +181,7 @@ """ # i18n: "deleted" is a keyword getargs(x, 0, 0, _("deleted takes no arguments")) - s = mctx.status().deleted + s = set(mctx.status().deleted) return [f for f in mctx.subset if f in s] @predicate('missing()', callstatus=True) @@ -190,7 +190,7 @@ """ # i18n: "missing" is a keyword getargs(x, 0, 0, _("missing takes no arguments")) - s = mctx.status().deleted + s = set(mctx.status().deleted) return [f for f in mctx.subset if f in s] @predicate('unknown()', callstatus=True) @@ -200,7 +200,7 @@ """ # i18n: "unknown" is a keyword getargs(x, 0, 0, _("unknown takes no arguments")) - s = mctx.status().unknown + s = set(mctx.status().unknown) return [f for f in mctx.subset if f in s] @predicate('ignored()', callstatus=True) @@ -210,7 +210,7 @@ """ # i18n: "ignored" is a keyword getargs(x, 0, 0, _("ignored takes no arguments")) - s = mctx.status().ignored + s = set(mctx.status().ignored) return [f for f in mctx.subset if f in s] @predicate('clean()', callstatus=True) @@ -219,7 +219,7 @@ """ # i18n: "clean" is a keyword getargs(x, 0, 0, _("clean takes no arguments")) - s = mctx.status().clean + s = set(mctx.status().clean) return [f for f in mctx.subset if f in s] def func(mctx, a, b):