aboutsummaryrefslogtreecommitdiff
path: root/pack-write.c
diff options
context:
space:
mode:
authorDavid Kastrup <dak@gnu.org>2014-04-26 01:56:49 +0200
committerJunio C Hamano <gitster@pobox.com>2014-04-28 14:38:15 -0700
commit7e6ac6e4391caa0fc379cb699013d503380e4214 (patch)
tree646d4303e0e977fd7ff0742220a30abe2b9562e1 /pack-write.c
parent35936f8fc38a214cc7d2595070641d39a541dfb1 (diff)
downloadgit-7e6ac6e4391caa0fc379cb699013d503380e4214.tar.gz
git-7e6ac6e4391caa0fc379cb699013d503380e4214.tar.xz
blame: large-scale performance rewrite
The previous implementation used a single sorted linear list of blame entries for organizing all partial or completed work. Every subtask had to scan the whole list, with most entries not being relevant to the task. The resulting run-time was quadratic to the number of separate chunks. This change gives every subtask its own data to work with. Subtasks are organized into "struct origin" chains hanging off particular commits. Commits are organized into a priority queue, processing them in commit date order in order to keep most of the work affecting a particular blob collated even in the presence of an extensive merge history. For large files with a diversified history, a speedup by a factor of 3 or more is not unusual. Signed-off-by: David Kastrup <dak@gnu.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pack-write.c')
0 files changed, 0 insertions, 0 deletions