[PATCHv9 1/9] receive-pack.c: shorten the execute_commands loop over all commands
From: Stefan Beller <hidden>
Date: 2016-06-15 23:03:23
Subsystem:
the rest · Maintainer:
Linus Torvalds
This commit shortens execute_commands loop over all commands by moving
some parts of the code to extra functions. This will help us in a later
patch to avoid duplicate code when the loop over all commands should be
made atomic or not.
No functional changes intended.
Suggested-by: Eric Sunshine <redacted>
Signed-off-by: Stefan Beller <redacted>
---
Notes:
v9:
* simplified should_process_cmd to be a one liner
* check_shallow_bugs doesn't check of shallow_update being set, rather
the function is just called if that option is set.
v8: no change
v7:
new in v7 as in v7 I'd split up the previous
[PATCH 4/7] receive-pack.c: receive-pack.c: use a single ref_transaction for atomic pushes
as suggested by Eric.
This is pretty much
> patch 1: Factor out code into helper functions which will be needed by
> the upcoming atomic and non-atomic worker functions. Example helpers:
> 'cmd->error_string' and cmd->skip_update' check; and the
> 'si->shallow_ref[cmd->index]' check and handling.
builtin/receive-pack.c | 42 ++++++++++++++++++++++++++----------------
1 file changed, 26 insertions(+), 16 deletions(-)
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 32fc540..68b9cfb 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c@@ -1042,11 +1042,33 @@ 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 check_shallow_bugs(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 +1099,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) + check_shallow_bugs(commands, si); } static struct command **queue_command(struct command **tail,
--
2.2.1.62.g3f15098