unlink_entry(): introduce schedule_dir_for_removal()
authorKjetil Barvik <barvik@broadpark.no>
Mon, 9 Feb 2009 20:54:07 +0000 (21:54 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 10 Feb 2009 04:59:26 +0000 (20:59 -0800)
commit7847892716a3c9a7b8facc076fc056ac425bcfe6
tree623746d79fbe18a0e2d32f67dfe6bb523ca8e8be
parent571998921d8fd4ee674545406aabb86987921252
unlink_entry(): introduce schedule_dir_for_removal()

Currently inside unlink_entry() if we get a successful removal of one
file with unlink(), we try to remove the leading directories each and
every time.  So if one directory containing 200 files is moved to an
other location we get 199 failed calls to rmdir() and 1 successful
call.

To fix this and avoid some unnecessary calls to rmdir(), we schedule
each directory for removal and wait much longer before we do the real
call to rmdir().

Since the unlink_entry() function is called with alphabetically sorted
names, this new function end up being very effective to avoid
unnecessary calls to rmdir().  In some cases over 95% of all calls to
rmdir() is removed with this patch.

Signed-off-by: Kjetil Barvik <barvik@broadpark.no>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache.h
symlinks.c
unpack-trees.c