mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
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:
commit
f35392b018
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue