topic-revset: update the revset to no longer build changectx
Atribute access is expensive, and changectx are very expensive to build, so we
skip these for better performance.
Before:
! wall 0.012195 comb 0.020000 user 0.020000 sys 0.000000 (best of 217)
After:
! wall 0.008816 comb 0.010000 user 0.010000 sys 0.000000 (best of 303)
(Before this changeset parent)
! wall 0.213261 comb 0.210000 user 0.210000 sys 0.000000 (best of 45)
--- a/hgext3rd/topic/revset.py Thu Jun 22 09:46:30 2017 +0200
+++ b/hgext3rd/topic/revset.py Thu Jun 22 09:41:01 2017 +0200
@@ -39,9 +39,16 @@
else:
matcher = lambda t: bool(t)
mutable = repo._phasecache.getrevset(repo, (phases.draft, phases.secret))
- drafts = subset & mutable
- return drafts.filter(
- lambda r: matcher(repo[r].extra().get(constants.extrakey, '')))
+
+ rawchange = repo.changelog.changelogrevision
+ key = constants.extrakey
+
+ def matchtopic(r):
+ topic = rawchange(r).extra.get(key)
+ if topic is None:
+ return False
+ return matcher(topic)
+ return (subset & mutable).filter(matchtopic)
def ngtipset(repo, subset, x):
"""`ngtip([branch])`