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,
|
static void execute_commands(struct command *commands,
|
||||||
const char *unpacker_error,
|
const char *unpacker_error,
|
||||||
struct shallow_info *si)
|
struct shallow_info *si)
|
||||||
{
|
{
|
||||||
int checked_connectivity;
|
|
||||||
struct command *cmd;
|
struct command *cmd;
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
struct iterate_data data;
|
struct iterate_data data;
|
||||||
@ -1077,27 +1100,15 @@ static void execute_commands(struct command *commands,
|
|||||||
free(head_name_to_free);
|
free(head_name_to_free);
|
||||||
head_name = head_name_to_free = resolve_refdup("HEAD", 0, sha1, NULL);
|
head_name = head_name_to_free = resolve_refdup("HEAD", 0, sha1, NULL);
|
||||||
|
|
||||||
checked_connectivity = 1;
|
|
||||||
for (cmd = commands; cmd; cmd = cmd->next) {
|
for (cmd = commands; cmd; cmd = cmd->next) {
|
||||||
if (cmd->error_string)
|
if (!should_process_cmd(cmd))
|
||||||
continue;
|
|
||||||
|
|
||||||
if (cmd->skip_update)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
cmd->error_string = update(cmd, si);
|
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)
|
if (shallow_update)
|
||||||
error("BUG: run 'git fsck' for safety.\n"
|
warn_if_skipped_connectivity_check(commands, si);
|
||||||
"If there are errors, try to remove "
|
|
||||||
"the reported refs above");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct command **queue_command(struct command **tail,
|
static struct command **queue_command(struct command **tail,
|
||||||
|
Loading…
Reference in New Issue
Block a user