annotate: simplify annotate parent function
The annotate algorithm used a custom parents() function to try to reuse
filectx and filelogs. I simplified it a bit to rely more heavily on the
self.parents() which makes it work well with alternative filectx
implementations. I tested performance on a file with 5000+ revisions
but no renames, and on a file with 500 revisions repeating a series of
4 edits+renames and saw zero performance hit. In fact, it was reliably a
couple milliseconds faster now.
Added the perfannotate command to contrib/perf.py for future use.
$ hg init a
$ cd a
$ hg init b
$ echo x > b/x
Should print nothing:
$ hg add b
$ hg st
$ echo y > b/y
$ hg st
Should fail:
$ hg st b/x
abort: path 'b/x' is inside nested repo 'b' (glob)
[255]
$ hg add b/x
abort: path 'b/x' is inside nested repo 'b' (glob)
[255]
Should fail:
$ hg add b b/x
abort: path 'b/x' is inside nested repo 'b' (glob)
[255]
$ hg st
Should arguably print nothing:
$ hg st b
$ echo a > a
$ hg ci -Ama a
Should fail:
$ hg mv a b
abort: path 'b/a' is inside nested repo 'b' (glob)
[255]
$ hg st
$ cd ..