Skip to content

Commit

Permalink
repack: respect pack.writebitmaps
Browse files Browse the repository at this point in the history
The config option to turn on bitmaps is read all the way
down in the plumbing of pack-objects. This makes it hard for
other options in the porcelain of repack to make decisions
based on the bitmap setting. For example,
repack.packKeptObjects tries to kick in by default only when
bitmaps are turned on. But it can't do so reliably because
it doesn't yet know whether we are using bitmaps.

This patch teaches repack to respect pack.writebitmaps. It
means we pass a redundant command-line flag to pack-objects,
but that's OK; it shouldn't affect the outcome.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Jun 10, 2014
1 parent 64d3dc9 commit 3198b89
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
6 changes: 5 additions & 1 deletion builtin/repack.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

static int delta_base_offset = 1;
static int pack_kept_objects = -1;
static int write_bitmap = -1;
static char *packdir, *packtmp;

static const char *const git_repack_usage[] = {
Expand All @@ -27,6 +28,10 @@ static int repack_config(const char *var, const char *value, void *cb)
pack_kept_objects = git_config_bool(var, value);
return 0;
}
if (!strcmp(var, "pack.writebitmaps")) {
write_bitmap = git_config_bool(var, value);
return 0;
}
return git_default_config(var, value, cb);
}

Expand Down Expand Up @@ -149,7 +154,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
int no_update_server_info = 0;
int quiet = 0;
int local = 0;
int write_bitmap = -1;

struct option builtin_repack_options[] = {
OPT_BIT('a', NULL, &pack_everything,
Expand Down
18 changes: 17 additions & 1 deletion t/t7700-repack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ test_expect_success 'objects in packs marked .keep are not repacked' '
test -z "$found_duplicate_object"
'

test_expect_success 'writing bitmaps can duplicate .keep objects' '
test_expect_success 'writing bitmaps via command-line can duplicate .keep objects' '
# build on $objsha1, $packsha1, and .keep state from previous
git repack -Adbl &&
test_when_finished "found_duplicate_object=" &&
Expand All @@ -51,6 +51,22 @@ test_expect_success 'writing bitmaps can duplicate .keep objects' '
test "$found_duplicate_object" = 1
'

test_expect_success 'writing bitmaps via config can duplicate .keep objects' '
# build on $objsha1, $packsha1, and .keep state from previous
git -c pack.writebitmaps=true repack -Adl &&
test_when_finished "found_duplicate_object=" &&
for p in .git/objects/pack/*.idx; do
idx=$(basename $p)
test "pack-$packsha1.idx" = "$idx" && continue
if git verify-pack -v $p | egrep "^$objsha1"; then
found_duplicate_object=1
echo "DUPLICATE OBJECT FOUND"
break
fi
done &&
test "$found_duplicate_object" = 1
'

test_expect_success 'loose objects in alternate ODB are not repacked' '
mkdir alt_objects &&
echo `pwd`/alt_objects > .git/objects/info/alternates &&
Expand Down

0 comments on commit 3198b89

Please sign in to comment.