aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-11-16 00:49:02 -0800
committerJunio C Hamano <gitster@pobox.com>2008-11-16 00:49:02 -0800
commitc9d8563c815a6a90bcc15057de288684d7cae5ef (patch)
tree78b6e6e2de82947aff10f58bc309870e4eade303
parent47a792539a48327e62c594f2befb5c5d1e58c0f2 (diff)
parent83d0289df6fb4deae100ee3fc37b90683c2e8c9f (diff)
downloadgit-c9d8563c815a6a90bcc15057de288684d7cae5ef.tar.gz
git-c9d8563c815a6a90bcc15057de288684d7cae5ef.tar.xz
Merge branch 'bc/maint-keep-pack'
* bc/maint-keep-pack: repack: only unpack-unreachable if we are deleting redundant packs
-rw-r--r--Documentation/git-repack.txt11
-rwxr-xr-xgit-repack.sh3
-rwxr-xr-xt/t7701-repack-unpack-unreachable.sh18
3 files changed, 22 insertions, 10 deletions
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt
index bbe1485a9..aaa885262 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.txt
@@ -38,12 +38,11 @@ OPTIONS
dangling.
-A::
- Same as `-a`, but any unreachable objects in a previous
- pack become loose, unpacked objects, instead of being
- left in the old pack. Unreachable objects are never
- intentionally added to a pack, even when repacking.
- When used with '-d', this option
- prevents unreachable objects from being immediately
+ Same as `-a`, unless '-d' is used. Then any unreachable
+ objects in a previous pack become loose, unpacked objects,
+ instead of being left in the old pack. Unreachable objects
+ are never intentionally added to a pack, even when repacking.
+ This option prevents unreachable objects from being immediately
deleted by way of being left in the old pack and then
removed. Instead, the loose unreachable objects
will be pruned according to normal expiry rules
diff --git a/git-repack.sh b/git-repack.sh
index 4d313d136..458a497af 100755
--- a/git-repack.sh
+++ b/git-repack.sh
@@ -71,7 +71,8 @@ case ",$all_into_one," in
existing="$existing $e"
fi
done
- if test -n "$args" -a -n "$unpack_unreachable"
+ if test -n "$args" -a -n "$unpack_unreachable" -a \
+ -n "$remove_redundant"
then
args="$args $unpack_unreachable"
fi
diff --git a/t/t7701-repack-unpack-unreachable.sh b/t/t7701-repack-unpack-unreachable.sh
index b48046e26..63a8225ae 100755
--- a/t/t7701-repack-unpack-unreachable.sh
+++ b/t/t7701-repack-unpack-unreachable.sh
@@ -8,7 +8,7 @@ fsha1=
csha1=
tsha1=
-test_expect_success '-A option leaves unreachable objects unpacked' '
+test_expect_success '-A with -d option leaves unreachable objects unpacked' '
echo content > file1 &&
git add . &&
git commit -m initial_commit &&
@@ -58,7 +58,7 @@ compare_mtimes ()
' -- "$@"
}
-test_expect_success 'unpacked objects receive timestamp of pack file' '
+test_expect_success '-A without -d option leaves unreachable objects packed' '
fsha1path=$(echo "$fsha1" | sed -e "s|\(..\)|\1/|") &&
fsha1path=".git/objects/$fsha1path" &&
csha1path=$(echo "$csha1" | sed -e "s|\(..\)|\1/|") &&
@@ -75,7 +75,19 @@ test_expect_success 'unpacked objects receive timestamp of pack file' '
git branch -D transient_branch &&
sleep 1 &&
git repack -A -l &&
- compare_mtimes "$packfile" "$fsha1path" "$csha1path" "$tsha1path"
+ test ! -f "$fsha1path" &&
+ test ! -f "$csha1path" &&
+ test ! -f "$tsha1path" &&
+ git show $fsha1 &&
+ git show $csha1 &&
+ git show $tsha1
+'
+
+test_expect_success 'unpacked objects receive timestamp of pack file' '
+ tmppack=".git/objects/pack/tmp_pack" &&
+ ln "$packfile" "$tmppack" &&
+ git repack -A -l -d &&
+ compare_mtimes "$tmppack" "$fsha1path" "$csha1path" "$tsha1path"
'
test_done