fast-import: move command state globals into 'struct fast_import_state'

A previous commit introduced 'struct fast_import_state' to hold some
command state, and reduce the need for global variables.

Let's continue in the same direction and move two more global variables
that describe the command state into it: 'seen_data_command' and
'allow_unsafe_features'.

All the sites accessing these variables are already in functions that
receive the 'state' parameter (or in cmd_fast_import() which owns the
struct), so no additional threading is needed.

As 'state->allow_unsafe_features' is now dereferenced in
check_unsafe_feature(), its 'state' parameter is no longer unused, so
the UNUSED marker is removed.

The fast_import_state_init() call is moved up before the early
command-line scan for '--allow-unsafe-features', so that this option
can be recorded directly into the struct without being clobbered by
the memset() in fast_import_state_init().

This is a mechanical refactoring with no intended behavior change.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
seen
Christian Couder 2026-07-16 18:55:16 +02:00 committed by Junio C Hamano
parent 36bd8a1e0d
commit f254d37b89
1 changed files with 12 additions and 12 deletions

View File

@ -257,9 +257,7 @@ static struct recent_command *rc_free;
static unsigned int cmd_save = 100;
static uintmax_t next_mark;
static struct strbuf new_data = STRBUF_INIT;
static int seen_data_command;
static int require_explicit_termination;
static int allow_unsafe_features;

/* Signal handling */
static volatile sig_atomic_t checkpoint_requested;
@ -277,6 +275,8 @@ struct fast_import_state {
int argc;
const char **argv;
const char *prefix;
int seen_data_command;
int allow_unsafe_features;
};

static void fast_import_state_init(struct fast_import_state *state,
@ -1876,7 +1876,7 @@ static int read_next_command(struct fast_import_state *state)
if (stdin_eof)
return EOF;

if (!seen_data_command
if (!state->seen_data_command
&& !starts_with(command_buf.buf, "feature ")
&& !starts_with(command_buf.buf, "option ")) {
parse_argv(state);
@ -3809,9 +3809,9 @@ static int parse_one_option(struct fast_import_state *state, const char *option)
return 1;
}

static void check_unsafe_feature(struct fast_import_state *state UNUSED, const char *feature, int from_stream)
static void check_unsafe_feature(struct fast_import_state *state, const char *feature, int from_stream)
{
if (from_stream && !allow_unsafe_features)
if (from_stream && !state->allow_unsafe_features)
die(_("feature '%s' forbidden in input without --allow-unsafe-features"),
feature);
}
@ -3860,7 +3860,7 @@ static int parse_one_feature(struct fast_import_state *state, const char *featur

static void parse_feature(struct fast_import_state *state, const char *feature)
{
if (seen_data_command)
if (state->seen_data_command)
die(_("got feature command '%s' after data command"), feature);

if (parse_one_feature(state, feature, 1))
@ -3871,7 +3871,7 @@ static void parse_feature(struct fast_import_state *state, const char *feature)

static void parse_option(struct fast_import_state *state, const char *option)
{
if (seen_data_command)
if (state->seen_data_command)
die(_("got option command '%s' after data command"), option);

if (parse_one_option(state, option))
@ -3939,7 +3939,7 @@ static void parse_argv(struct fast_import_state *state)
if (i != state->argc)
usage(fast_import_usage);

seen_data_command = 1;
state->seen_data_command = 1;
if (import_marks_file)
read_marks();
build_mark_map(&sub_marks_from, &sub_marks_to);
@ -3954,6 +3954,8 @@ int cmd_fast_import(int argc,

show_usage_if_asked(argc, argv, fast_import_usage);

fast_import_state_init(&state, argc, argv, prefix);

reset_pack_idx_option(&pack_idx_opts);
git_pack_config();

@ -3977,11 +3979,9 @@ int cmd_fast_import(int argc,
if (*arg != '-' || !strcmp(arg, "--"))
break;
if (!strcmp(arg, "--allow-unsafe-features"))
allow_unsafe_features = 1;
state.allow_unsafe_features = 1;
}

fast_import_state_init(&state, argc, argv, prefix);

rc_free = mem_pool_alloc(&fi_mem_pool, cmd_save * sizeof(*rc_free));
for (unsigned int i = 0; i < (cmd_save - 1); i++)
rc_free[i].next = &rc_free[i + 1];
@ -4028,7 +4028,7 @@ int cmd_fast_import(int argc,
}

/* argv hasn't been parsed yet, do so */
if (!seen_data_command)
if (!state.seen_data_command)
parse_argv(&state);

if (require_explicit_termination && feof(stdin))