changelog: lazily parse description
Before, the description field was converted to a localstr at parse
time. With this patch, we store the raw description and convert to
a localstr when it is first accessed.
We see a revset speedup for revsets that don't access the description:
author(mpm)
0.896565
0.914234
0.869085
date(2015)
0.878797
0.891980
0.862525
extra(rebase_source)
0.865446
0.912514
0.871500
author(mpm) or author(greg)
1.801832
1.860402
1.791589
date(2015) or branch(default)
0.968276
0.994673
0.974027
author(mpm) or desc(bug) or date(2015) or extra(rebase_source)
3.656193
3.721032
3.643593
As you can see, most of these revsets are already faster than from
before this refactoring: we have already offset the performance
loss from the introduction of the new class representing parsed
changelog entries!
https://bz.mercurial-scm.org/612
$ hg init
$ mkdir src
$ echo a > src/a.c
$ hg ci -Ama
adding src/a.c
$ hg mv src source
moving src/a.c to source/a.c (glob)
$ hg ci -Ammove
$ hg co -C 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo new > src/a.c
$ echo compiled > src/a.o
$ hg ci -mupdate
created new head
$ hg status
? src/a.o
$ hg merge
merging src/a.c and source/a.c to source/a.c
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status
M source/a.c
R src/a.c
? src/a.o