Skip to content

Commit a83c885

Browse files
drafnelgitster
authored andcommitted
t7700: demonstrate misbehavior of 'repack -a' when local packs exist
The ability to "...fatten [the] local repository by packing everything that is needed by the local ref into a single new pack, including things that are borrowed from alternates"[1] is supposed to be provided by the '-a' or '-A' options to repack when '-l' is not used, but there is a flaw. For each pack in the local repository without a .keep file, repack supplies a --unpacked=<pack> argument to pack-objects. The --unpacked option to pack-objects, with or without an argument, causes pack-objects to ignore any object which is packed in a pack not mentioned in an argument to --unpacked=. So, if there are local packs, and 'repack -a' is called, then any objects which reside in packs accessible through alternates will _not_ be packed. If there are no local packs, then no --unpacked argument will be supplied, and repack will behave as expected. [1] http://mid.gmane.org/7v8wrwidi3.fsf@gitster.siamese.dyndns.org Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 7a38329 commit a83c885

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

t/t7700-repack.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,24 @@ test_expect_success 'packed obs in alt ODB are repacked even when local repo is
6969
done
7070
'
7171

72+
test_expect_failure 'packed obs in alt ODB are repacked when local repo has packs' '
73+
rm -f .git/objects/pack/* &&
74+
echo new_content >> file1 &&
75+
git add file1 &&
76+
git commit -m more_content &&
77+
git repack &&
78+
git repack -a -d &&
79+
myidx=$(ls -1 .git/objects/pack/*.idx) &&
80+
test -f "$myidx" &&
81+
for p in alt_objects/pack/*.idx; do
82+
git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
83+
done | while read sha1 rest; do
84+
if ! ( git verify-pack -v $myidx | grep "^$sha1" ); then
85+
echo "Missing object in local pack: $sha1"
86+
return 1
87+
fi
88+
done
89+
'
90+
7291
test_done
7392

0 commit comments

Comments
 (0)