pack-objects: use --objects-edge-aggressive for shallow repos
When fetching into or pushing from a shallow repository, we want to aggressively mark edges as uninteresting, since this decreases the pack size. However, aggressively marking edges can negatively affect performance on large non-shallow repositories with lots of refs. Teach pack-objects a --shallow option to indicate that we're pushing from or fetching into a shallow repository. Use --objects-edge-aggressive only for shallow repositories and otherwise use --objects-edge, which performs better in the general case. Update the callers to pass the --shallow option when they are dealing with a shallow repository. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
1684c1b219
commit
2dacf26d09
@ -2613,6 +2613,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int use_internal_rev_list = 0;
|
||||
int thin = 0;
|
||||
int shallow = 0;
|
||||
int all_progress_implied = 0;
|
||||
struct argv_array rp = ARGV_ARRAY_INIT;
|
||||
int rev_list_unpacked = 0, rev_list_all = 0, rev_list_reflog = 0;
|
||||
@ -2677,6 +2678,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
||||
PARSE_OPT_OPTARG, option_parse_unpack_unreachable },
|
||||
OPT_BOOL(0, "thin", &thin,
|
||||
N_("create thin packs")),
|
||||
OPT_BOOL(0, "shallow", &shallow,
|
||||
N_("create packs suitable for shallow fetches")),
|
||||
OPT_BOOL(0, "honor-pack-keep", &ignore_packed_keep,
|
||||
N_("ignore packs that have companion .keep file")),
|
||||
OPT_INTEGER(0, "compression", &pack_compression_level,
|
||||
@ -2711,7 +2714,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
||||
argv_array_push(&rp, "pack-objects");
|
||||
if (thin) {
|
||||
use_internal_rev_list = 1;
|
||||
argv_array_push(&rp, "--objects-edge-aggressive");
|
||||
argv_array_push(&rp, shallow
|
||||
? "--objects-edge-aggressive"
|
||||
: "--objects-edge");
|
||||
} else
|
||||
argv_array_push(&rp, "--objects");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user