comparison mercurial/revset.py @ 22451:186fd06283b4

revset: lower weight for _intlist function The histedit command uses a revset like: (_intlist('1234\x001235')) and merge() Previously the optimizer gave a weight of 1.5 to the _intlist side (1 for the function, 0.5 for the string) which caused it to process the merge() side first. This caused it to evaluate merge against every commit in the repo, which took 2.5 seconds on a large repo. I changed the weight of _intlist to 0, since it's a trivial calculation, which makes it process intlist first, which makes merge apply only to the revs in the list. Which makes the revset take 0.15 seconds now. Cutting off 2.4 seconds off our histedit performance. >From the revset benchmark: revset #25: (_intlist('20000\x0020001')) and merge() 0) obsolete feature not enabled but 54243 markers found! ! wall 0.036767 comb 0.040000 user 0.040000 sys 0.000000 (best of 100) 1) obsolete feature not enabled but 54243 markers found! ! wall 0.000198 comb 0.000000 user 0.000000 sys 0.000000 (best of 9084)
author Durham Goode <durham@fb.com>
date Fri, 12 Sep 2014 14:21:18 -0700
parents 95af98616aa7
children 8488955127b0
comparison
equal deleted inserted replaced
22450:95af98616aa7 22451:186fd06283b4
1909 w = 30 # slower 1909 w = 30 # slower
1910 elif f == "contains": 1910 elif f == "contains":
1911 w = 100 # very slow 1911 w = 100 # very slow
1912 elif f == "ancestor": 1912 elif f == "ancestor":
1913 w = 1 * smallbonus 1913 w = 1 * smallbonus
1914 elif f in "reverse limit first": 1914 elif f in "reverse limit first _intlist":
1915 w = 0 1915 w = 0
1916 elif f in "sort": 1916 elif f in "sort":
1917 w = 10 # assume most sorts look at changelog 1917 w = 10 # assume most sorts look at changelog
1918 else: 1918 else:
1919 w = 1 1919 w = 1