remote: repack packed-refs once when deleting multiple refs
commitc9e768bb77762765f739fffb5c09d0888f3de20e
authorJens Lindström <jl@opera.com>
Fri, 23 May 2014 10:29:45 +0000 (23 12:29 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 May 2014 19:30:42 +0000 (27 12:30 -0700)
treeec3e7555084a3d62830bbef801590ce64cada955
parentb07bdd3472886cbdd412ee3e7489273522c43133
remote: repack packed-refs once when deleting multiple refs

When 'git remote rm' or 'git remote prune' were used in a repository
with many refs, and needed to delete many remote-tracking refs, a lot
of time was spent deleting those refs since for each deleted ref,
repack_without_refs() was called to rewrite packed-refs without just
that deleted ref.

To avoid this, call repack_without_refs() first to repack without all
the refs that will be deleted, before calling delete_ref() to delete
each one completely.  The call to repack_without_ref() in delete_ref()
then becomes a no-op, since packed-refs already won't contain any of
the deleted refs.

Signed-off-by: Jens Lindström <jl@opera.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/remote.c
refs.c
refs.h