receive-pack.c: shorten the execute_commands loop over all commands
Make the main "execute_commands" loop in receive-pack easier to read by splitting out some steps into helper functions. The new helper 'should_process_cmd' checks if a ref update is unnecessary, whether due to an error having occurred or for another reason. The helper 'warn_if_skipped_connectivity_check' warns if we have forgotten to run a connectivity check on a ref which is shallow for the client which would be a bug. This will help us to duplicate less code in a later patch when we make a second copy of the "execute_commands" loop. No functional change intended. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
c653e0343d
commit
a6a8431968
@ -1042,11 +1042,34 @@ static void reject_updates_to_hidden(struct command *commands)
|
||||
}
|
||||
}
|
||||
|
||||
static int should_process_cmd(struct command *cmd)
|
||||
{
|
||||
return !cmd->error_string && !cmd->skip_update;
|
||||
}
|
||||
|
||||
static void warn_if_skipped_connectivity_check(struct command *commands,
|
||||
struct shallow_info *si)
|
||||
{
|
||||
struct command *cmd;
|
||||
int checked_connectivity = 1;
|
||||
|
||||
for (cmd = commands; cmd; cmd = cmd->next) {
|
||||
if (should_process_cmd(cmd) && si->shallow_ref[cmd->index]) {
|
||||
error("BUG: connectivity check has not been run on ref %s",
|
||||
cmd->ref_name);
|
||||
checked_connectivity = 0;
|
||||
}
|
||||
}
|
||||
if (!checked_connectivity)
|
||||
error("BUG: run 'git fsck' for safety.\n"
|
||||
"If there are errors, try to remove "
|
||||
"the reported refs above");
|
||||
}
|
||||
|
||||
static void execute_commands(struct command *commands,
|
||||
const char *unpacker_error,
|
||||
struct shallow_info *si)
|
||||
{
|
||||
int checked_connectivity;
|
||||
struct command *cmd;
|
||||
unsigned char sha1[20];
|
||||
struct iterate_data data;
|
||||
@ -1077,27 +1100,15 @@ static void execute_commands(struct command *commands,
|
||||
free(head_name_to_free);
|
||||
head_name = head_name_to_free = resolve_refdup("HEAD", 0, sha1, NULL);
|
||||
|
||||
checked_connectivity = 1;
|
||||
for (cmd = commands; cmd; cmd = cmd->next) {
|
||||
if (cmd->error_string)
|
||||
continue;
|
||||
|
||||
if (cmd->skip_update)
|
||||
if (!should_process_cmd(cmd))
|
||||
continue;
|
||||
|
||||
cmd->error_string = update(cmd, si);
|
||||
if (shallow_update && !cmd->error_string &&
|
||||
si->shallow_ref[cmd->index]) {
|
||||
error("BUG: connectivity check has not been run on ref %s",
|
||||
cmd->ref_name);
|
||||
checked_connectivity = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (shallow_update && !checked_connectivity)
|
||||
error("BUG: run 'git fsck' for safety.\n"
|
||||
"If there are errors, try to remove "
|
||||
"the reported refs above");
|
||||
if (shallow_update)
|
||||
warn_if_skipped_connectivity_check(commands, si);
|
||||
}
|
||||
|
||||
static struct command **queue_command(struct command **tail,
|
||||
|
Loading…
Reference in New Issue
Block a user