builtin/repack.c: convert `--write-midx` to an `OPT_CALLBACK`
Change the --write-midx (-m) flag from an OPT_BOOL to an OPT_CALLBACK that accepts an optional mode argument. Introduce an enum with REPACK_WRITE_MIDX_NONE and REPACK_WRITE_MIDX_DEFAULT to distinguish between the two states, and update all existing boolean checks accordingly. For now, passing no argument (or just `-m`) selects the default mode, preserving existing behavior. A subsequent commit will add a new mode for writing incremental MIDXs. Extract repack_write_midx() as a dispatcher that selects the appropriate MIDX-writing implementation based on the mode. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>main
parent
d0ac3969f4
commit
d376967fbf
|
|
@ -97,6 +97,24 @@ static int repack_config(const char *var, const char *value,
|
|||
return git_default_config(var, value, ctx, cb);
|
||||
}
|
||||
|
||||
static int option_parse_write_midx(const struct option *opt, const char *arg,
|
||||
int unset)
|
||||
{
|
||||
enum repack_write_midx_mode *cfg = opt->value;
|
||||
|
||||
if (unset) {
|
||||
*cfg = REPACK_WRITE_MIDX_NONE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!arg || !*arg)
|
||||
*cfg = REPACK_WRITE_MIDX_DEFAULT;
|
||||
else
|
||||
return error(_("unknown value for %s: %s"), opt->long_name, arg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmd_repack(int argc,
|
||||
const char **argv,
|
||||
const char *prefix,
|
||||
|
|
@ -119,7 +137,7 @@ int cmd_repack(int argc,
|
|||
struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
|
||||
struct pack_objects_args po_args = PACK_OBJECTS_ARGS_INIT;
|
||||
struct pack_objects_args cruft_po_args = PACK_OBJECTS_ARGS_INIT;
|
||||
int write_midx = 0;
|
||||
enum repack_write_midx_mode write_midx = REPACK_WRITE_MIDX_NONE;
|
||||
const char *cruft_expiration = NULL;
|
||||
const char *expire_to = NULL;
|
||||
const char *filter_to = NULL;
|
||||
|
|
@ -185,8 +203,14 @@ int cmd_repack(int argc,
|
|||
N_("do not repack this pack")),
|
||||
OPT_INTEGER('g', "geometric", &geometry.split_factor,
|
||||
N_("find a geometric progression with factor <N>")),
|
||||
OPT_BOOL('m', "write-midx", &write_midx,
|
||||
N_("write a multi-pack index of the resulting packs")),
|
||||
OPT_CALLBACK_F(0, "write-midx", &write_midx,
|
||||
N_("mode"),
|
||||
N_("write a multi-pack index of the resulting packs"),
|
||||
PARSE_OPT_OPTARG, option_parse_write_midx),
|
||||
OPT_SET_INT_F('m', NULL, &write_midx,
|
||||
N_("write a multi-pack index of the resulting packs"),
|
||||
REPACK_WRITE_MIDX_DEFAULT,
|
||||
PARSE_OPT_HIDDEN),
|
||||
OPT_STRING(0, "expire-to", &expire_to, N_("dir"),
|
||||
N_("pack prefix to store a pack containing pruned objects")),
|
||||
OPT_STRING(0, "filter-to", &filter_to, N_("dir"),
|
||||
|
|
@ -221,14 +245,16 @@ int cmd_repack(int argc,
|
|||
pack_everything |= ALL_INTO_ONE;
|
||||
|
||||
if (write_bitmaps < 0) {
|
||||
if (!write_midx &&
|
||||
if (write_midx == REPACK_WRITE_MIDX_NONE &&
|
||||
(!(pack_everything & ALL_INTO_ONE) || !is_bare_repository()))
|
||||
write_bitmaps = 0;
|
||||
}
|
||||
if (po_args.pack_kept_objects < 0)
|
||||
po_args.pack_kept_objects = write_bitmaps > 0 && !write_midx;
|
||||
po_args.pack_kept_objects = write_bitmaps > 0 &&
|
||||
write_midx == REPACK_WRITE_MIDX_NONE;
|
||||
|
||||
if (write_bitmaps && !(pack_everything & ALL_INTO_ONE) && !write_midx)
|
||||
if (write_bitmaps && !(pack_everything & ALL_INTO_ONE) &&
|
||||
write_midx == REPACK_WRITE_MIDX_NONE)
|
||||
die(_(incremental_bitmap_conflict_error));
|
||||
|
||||
if (write_bitmaps && po_args.local &&
|
||||
|
|
@ -244,7 +270,7 @@ int cmd_repack(int argc,
|
|||
write_bitmaps = 0;
|
||||
}
|
||||
|
||||
if (write_midx && write_bitmaps) {
|
||||
if (write_midx != REPACK_WRITE_MIDX_NONE && write_bitmaps) {
|
||||
struct strbuf path = STRBUF_INIT;
|
||||
|
||||
strbuf_addf(&path, "%s/%s_XXXXXX",
|
||||
|
|
@ -297,7 +323,7 @@ int cmd_repack(int argc,
|
|||
}
|
||||
if (repo_has_promisor_remote(repo))
|
||||
strvec_push(&cmd.args, "--exclude-promisor-objects");
|
||||
if (!write_midx) {
|
||||
if (write_midx == REPACK_WRITE_MIDX_NONE) {
|
||||
if (write_bitmaps > 0)
|
||||
strvec_push(&cmd.args, "--write-bitmap-index");
|
||||
else if (write_bitmaps < 0)
|
||||
|
|
@ -519,7 +545,7 @@ int cmd_repack(int argc,
|
|||
if (delete_redundant && pack_everything & ALL_INTO_ONE)
|
||||
existing_packs_mark_for_deletion(&existing, &names);
|
||||
|
||||
if (write_midx) {
|
||||
if (write_midx != REPACK_WRITE_MIDX_NONE) {
|
||||
struct repack_write_midx_opts opts = {
|
||||
.existing = &existing,
|
||||
.geometry = &geometry,
|
||||
|
|
@ -528,11 +554,11 @@ int cmd_repack(int argc,
|
|||
.packdir = packdir,
|
||||
.show_progress = show_progress,
|
||||
.write_bitmaps = write_bitmaps > 0,
|
||||
.midx_must_contain_cruft = midx_must_contain_cruft
|
||||
.midx_must_contain_cruft = midx_must_contain_cruft,
|
||||
.mode = write_midx,
|
||||
};
|
||||
|
||||
ret = write_midx_included_packs(&opts);
|
||||
|
||||
ret = repack_write_midx(&opts);
|
||||
if (ret)
|
||||
goto cleanup;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -315,7 +315,7 @@ static int repack_fill_midx_stdin_packs(struct child_process *cmd,
|
|||
return finish_command(cmd);
|
||||
}
|
||||
|
||||
int write_midx_included_packs(struct repack_write_midx_opts *opts)
|
||||
static int write_midx_included_packs(struct repack_write_midx_opts *opts)
|
||||
{
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
struct string_list include = STRING_LIST_INIT_DUP;
|
||||
|
|
@ -378,3 +378,15 @@ done:
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int repack_write_midx(struct repack_write_midx_opts *opts)
|
||||
{
|
||||
switch (opts->mode) {
|
||||
case REPACK_WRITE_MIDX_NONE:
|
||||
BUG("write_midx mode is NONE?");
|
||||
case REPACK_WRITE_MIDX_DEFAULT:
|
||||
return write_midx_included_packs(opts);
|
||||
default:
|
||||
BUG("unhandled write_midx mode: %d", opts->mode);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
8
repack.h
8
repack.h
|
|
@ -134,6 +134,11 @@ void pack_geometry_release(struct pack_geometry *geometry);
|
|||
|
||||
struct tempfile;
|
||||
|
||||
enum repack_write_midx_mode {
|
||||
REPACK_WRITE_MIDX_NONE,
|
||||
REPACK_WRITE_MIDX_DEFAULT,
|
||||
};
|
||||
|
||||
struct repack_write_midx_opts {
|
||||
struct existing_packs *existing;
|
||||
struct pack_geometry *geometry;
|
||||
|
|
@ -143,10 +148,11 @@ struct repack_write_midx_opts {
|
|||
int show_progress;
|
||||
int write_bitmaps;
|
||||
int midx_must_contain_cruft;
|
||||
enum repack_write_midx_mode mode;
|
||||
};
|
||||
|
||||
void midx_snapshot_refs(struct repository *repo, struct tempfile *f);
|
||||
int write_midx_included_packs(struct repack_write_midx_opts *opts);
|
||||
int repack_write_midx(struct repack_write_midx_opts *opts);
|
||||
|
||||
int write_filtered_pack(const struct write_pack_opts *opts,
|
||||
struct existing_packs *existing,
|
||||
|
|
|
|||
Loading…
Reference in New Issue