Skip to content

Commit

Permalink
repack: only unpack-unreachable if we are deleting redundant packs
Browse files Browse the repository at this point in the history
The -A option calls pack-objects with the --unpack-unreachable option so
that the unreachable objects in local packs are left in the local object
store loose. But if the -d option to repack was _not_ used, then these
unpacked loose objects are redundant and unnecessary.

Update tests in t7701.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Brandon Casey authored and Junio C Hamano committed Nov 15, 2008
1 parent 3289b9d commit 83d0289
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 10 deletions.
11 changes: 5 additions & 6 deletions Documentation/git-repack.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion git-repack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 15 additions & 3 deletions t/t7701-repack-unpack-unreachable.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand Down Expand Up @@ -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/|") &&
Expand All @@ -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

0 comments on commit 83d0289

Please sign in to comment.