Merge branch 'tb/geometric-repack'
"git repack" so far has been only capable of repacking everything under the sun into a single pack (or split by size). A cleverer strategy to reduce the cost of repacking a repository has been introduced. * tb/geometric-repack: builtin/pack-objects.c: ignore missing links with --stdin-packs builtin/repack.c: reword comment around pack-objects flags builtin/repack.c: be more conservative with unsigned overflows builtin/repack.c: assign pack split later t7703: test --geometric repack with loose objects builtin/repack.c: do not repack single packs with --geometric builtin/repack.c: add '--geometric' option packfile: add kept-pack cache for find_kept_pack_entry() builtin/pack-objects.c: rewrite honor-pack-keep logic p5303: measure time to repack with keep p5303: add missing &&-chains builtin/pack-objects.c: add '--stdin-packs' option revision: learn '--no-kept-objects' packfile: introduce 'find_kept_pack_entry()'
This commit is contained in:
15
revision.c
15
revision.c
@ -2336,6 +2336,16 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||
revs->unpacked = 1;
|
||||
} else if (starts_with(arg, "--unpacked=")) {
|
||||
die(_("--unpacked=<packfile> no longer supported"));
|
||||
} else if (!strcmp(arg, "--no-kept-objects")) {
|
||||
revs->no_kept_objects = 1;
|
||||
revs->keep_pack_cache_flags |= IN_CORE_KEEP_PACKS;
|
||||
revs->keep_pack_cache_flags |= ON_DISK_KEEP_PACKS;
|
||||
} else if (skip_prefix(arg, "--no-kept-objects=", &optarg)) {
|
||||
revs->no_kept_objects = 1;
|
||||
if (!strcmp(optarg, "in-core"))
|
||||
revs->keep_pack_cache_flags |= IN_CORE_KEEP_PACKS;
|
||||
if (!strcmp(optarg, "on-disk"))
|
||||
revs->keep_pack_cache_flags |= ON_DISK_KEEP_PACKS;
|
||||
} else if (!strcmp(arg, "-r")) {
|
||||
revs->diff = 1;
|
||||
revs->diffopt.flags.recursive = 1;
|
||||
@ -3795,6 +3805,11 @@ enum commit_action get_commit_action(struct rev_info *revs, struct commit *commi
|
||||
return commit_ignore;
|
||||
if (revs->unpacked && has_object_pack(&commit->object.oid))
|
||||
return commit_ignore;
|
||||
if (revs->no_kept_objects) {
|
||||
if (has_object_kept_pack(&commit->object.oid,
|
||||
revs->keep_pack_cache_flags))
|
||||
return commit_ignore;
|
||||
}
|
||||
if (commit->object.flags & UNINTERESTING)
|
||||
return commit_ignore;
|
||||
if (revs->line_level_traverse && !want_ancestry(revs)) {
|
||||
|
Reference in New Issue
Block a user