repack: modify behavior of -A option to leave unreferenced objects unpacked
commitccc1297226b184c40459e9d373cc9eebfb7bd898
authorBrandon Casey <drafnel@gmail.com>
Sat, 10 May 2008 04:01:55 +0000 (9 23:01 -0500)
committerJunio C Hamano <gitster@pobox.com>
Sun, 11 May 2008 18:24:48 +0000 (11 11:24 -0700)
treef5ccb0eae41922d795c4bb74f30f0e811f7f67e0
parent1f8115b113def8ee03701aa87b26c5e8b7c94434
repack: modify behavior of -A option to leave unreferenced objects unpacked

The previous behavior of the -A option was to retain any previously
packed objects which had become unreferenced, and place them into the newly
created pack file.  Since git-gc, when run automatically with the --auto
option, calls repack with the -A option, this had the effect of retaining
unreferenced packed objects indefinitely. To avoid this scenario, the
user was required to run git-gc with the little known --prune option or
to manually run repack with the -a option.

This patch changes the behavior of the -A option so that unreferenced
objects that exist in any pack file being replaced, will be unpacked into
the repository. The unreferenced loose objects can then be garbage collected
by git-gc (i.e. git-prune) based on the gc.pruneExpire setting.

Also add new tests for checking whether unreferenced objects which were
previously packed are properly left in the repository unpacked after
repacking.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-repack.sh
t/t7701-repack-unpack-unreachable.sh [new file with mode: 0755]