log: speed up single file log with hidden revs (
issue4747)
On repos with lots of heads, the filelog() code could spend several
minutes decompressing manifests. This change instead tries to
efficiently scan the changelog for candidates and decompress as few
manifests as possible. This is a regression introduced in 3.3 by the
linkrev adjustment code. Prior to that, filelog was nearly instant.
For the repo in the bug report, this improves time of a simple log
command from ~3 minutes to ~.5 seconds, a 360x speedup.
For the main Mercurial repo, a log of commands.py slows down from
1.14s to 1.45s, a 27% slowdown. This is still faster than the file()
revset, which takes 2.1 seconds.
FROM centos:centos6
RUN yum install -y gcc
RUN yum install -y python-devel python-docutils
RUN yum install -y make
RUN yum install -y rpm-build
RUN yum install -y gettext
RUN yum install -y tar
# For creating repo meta data
RUN yum install -y createrepo