summaryrefslogtreecommitdiff
path: root/git-repack.sh
diff options
context:
space:
mode:
authorBrandon Casey <drafnel@gmail.com>2008-05-09 23:01:55 -0500
committerJunio C Hamano <gitster@pobox.com>2008-05-11 11:24:48 -0700
commitccc1297226b184c40459e9d373cc9eebfb7bd898 (patch)
treef5ccb0eae41922d795c4bb74f30f0e811f7f67e0 /git-repack.sh
parent1f8115b113def8ee03701aa87b26c5e8b7c94434 (diff)
downloadgit-ccc1297226b184c40459e9d373cc9eebfb7bd898.tar.gz
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>
Diffstat (limited to 'git-repack.sh')
-rwxr-xr-xgit-repack.sh18
1 files changed, 13 insertions, 5 deletions
diff --git a/git-repack.sh b/git-repack.sh
index e18eb3f5dc..a0e06ed076 100755
--- a/git-repack.sh
+++ b/git-repack.sh
@@ -30,7 +30,7 @@ do
-n) no_update_info=t ;;
-a) all_into_one=t ;;
-A) all_into_one=t
- keep_unreachable=--keep-unreachable ;;
+ keep_unreachable=t ;;
-d) remove_redundant=t ;;
-q) quiet=-q ;;
-f) no_reuse=--no-reuse-object ;;
@@ -78,9 +78,6 @@ case ",$all_into_one," in
if test -z "$args"
then
args='--unpacked --incremental'
- elif test -n "$keep_unreachable"
- then
- args="$args $keep_unreachable"
fi
;;
esac
@@ -130,7 +127,18 @@ then
do
case " $fullbases " in
*" $e "*) ;;
- *) rm -f "$e.pack" "$e.idx" "$e.keep" ;;
+ *)
+ rm -f "$e.idx" "$e.keep"
+ if test -n "$keep_unreachable" &&
+ test -f "$e.pack"
+ then
+ git unpack-objects < "$e.pack" || {
+ echo >&2 "Failed unpacking unreachable objects from redundant pack file $e.pack"
+ exit 1
+ }
+ fi
+ rm -f "$e.pack"
+ ;;
esac
done
)