Merge branch 'jk/repack-pack-keep-objects' into maint

* jk/repack-pack-keep-objects:
  repack: s/write_bitmap/&s/ in code
  repack: respect pack.writebitmaps
  repack: do not accidentally pack kept objects by default
This commit is contained in:
Junio C Hamano 2014-07-10 11:10:05 -07:00
commit f35392b018
2 changed files with 27 additions and 7 deletions

View file

@ -10,6 +10,7 @@
static int delta_base_offset = 1; static int delta_base_offset = 1;
static int pack_kept_objects = -1; static int pack_kept_objects = -1;
static int write_bitmaps = -1;
static char *packdir, *packtmp; static char *packdir, *packtmp;
static const char *const git_repack_usage[] = { static const char *const git_repack_usage[] = {
@ -27,6 +28,10 @@ static int repack_config(const char *var, const char *value, void *cb)
pack_kept_objects = git_config_bool(var, value); pack_kept_objects = git_config_bool(var, value);
return 0; return 0;
} }
if (!strcmp(var, "pack.writebitmaps")) {
write_bitmaps = git_config_bool(var, value);
return 0;
}
return git_default_config(var, value, cb); return git_default_config(var, value, cb);
} }
@ -149,7 +154,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
int no_update_server_info = 0; int no_update_server_info = 0;
int quiet = 0; int quiet = 0;
int local = 0; int local = 0;
int write_bitmap = -1;
struct option builtin_repack_options[] = { struct option builtin_repack_options[] = {
OPT_BIT('a', NULL, &pack_everything, OPT_BIT('a', NULL, &pack_everything,
@ -168,7 +172,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
OPT__QUIET(&quiet, N_("be quiet")), OPT__QUIET(&quiet, N_("be quiet")),
OPT_BOOL('l', "local", &local, OPT_BOOL('l', "local", &local,
N_("pass --local to git-pack-objects")), N_("pass --local to git-pack-objects")),
OPT_BOOL('b', "write-bitmap-index", &write_bitmap, OPT_BOOL('b', "write-bitmap-index", &write_bitmaps,
N_("write bitmap index")), N_("write bitmap index")),
OPT_STRING(0, "unpack-unreachable", &unpack_unreachable, N_("approxidate"), OPT_STRING(0, "unpack-unreachable", &unpack_unreachable, N_("approxidate"),
N_("with -A, do not loosen objects older than this")), N_("with -A, do not loosen objects older than this")),
@ -191,7 +195,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
git_repack_usage, 0); git_repack_usage, 0);
if (pack_kept_objects < 0) if (pack_kept_objects < 0)
pack_kept_objects = write_bitmap; pack_kept_objects = write_bitmaps > 0;
packdir = mkpathdup("%s/pack", get_object_directory()); packdir = mkpathdup("%s/pack", get_object_directory());
packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid()); packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
@ -217,9 +221,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
argv_array_pushf(&cmd_args, "--no-reuse-delta"); argv_array_pushf(&cmd_args, "--no-reuse-delta");
if (no_reuse_object) if (no_reuse_object)
argv_array_pushf(&cmd_args, "--no-reuse-object"); argv_array_pushf(&cmd_args, "--no-reuse-object");
if (write_bitmap >= 0) if (write_bitmaps >= 0)
argv_array_pushf(&cmd_args, "--%swrite-bitmap-index", argv_array_pushf(&cmd_args, "--%swrite-bitmap-index",
write_bitmap ? "" : "no-"); write_bitmaps ? "" : "no-");
if (pack_everything & ALL_INTO_ONE) { if (pack_everything & ALL_INTO_ONE) {
get_non_kept_pack_filenames(&existing_packs); get_non_kept_pack_filenames(&existing_packs);

View file

@ -35,9 +35,25 @@ test_expect_success 'objects in packs marked .keep are not repacked' '
test -z "$found_duplicate_object" 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 # build on $objsha1, $packsha1, and .keep state from previous
git repack -Adl && git repack -Adbl &&
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 '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=" && test_when_finished "found_duplicate_object=" &&
for p in .git/objects/pack/*.idx; do for p in .git/objects/pack/*.idx; do
idx=$(basename $p) idx=$(basename $p)