rm: only refresh entries that we may touch
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Sun, 17 Jan 2010 08:43:13 +0000 (15:43 +0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 19 Jan 2010 23:04:23 +0000 (15:04 -0800)
commit4e1a7baa2e466afded9ff50b9a4539b24dbd3584
tree72d6c05f17fd3039908bd85e24510ca384a4c688
parent688cd6d2b9335f2ac20d02996215a0e6da1779b5
rm: only refresh entries that we may touch

This gets rid of the whole tree cache refresh. Instead only path that
we touch will get refreshed. We may still lstat() more than needed,
but it'd be better playing safe.

This potentially reduces a large number of lstat() on big trees. Take
gentoo-x86 tree for example, which has roughly 80k files:

Unmodified Git:

$ time git rm --cached skel.ebuild
rm 'skel.ebuild'

real    0m1.441s
user    0m0.821s
sys     0m0.531s

Modified Git:

$ time ~/w/git/git rm --cached skel.ebuild
rm 'skel.ebuild'

real    0m0.941s
user    0m0.828s
sys     0m0.091s

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-rm.c