This patch will be incorporated into the right places in v3 of the series. Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> --- Notes: I don't want to resend the patch series today to accumulate comments, but this makes the last test pass, which is the whole point of the series. I'll put it into the right places in a reroll. builtin/receive-pack.c | 13 ++++++++++++- t/t5543-atomic-push.sh | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 0803fd2..3477f7c 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -1122,7 +1122,18 @@ static void execute_commands(struct command *commands, } if (use_atomic) { - if (ref_transaction_commit(transaction, &err)) { + /* update(...) may abort early (i.e. because the hook refused to + * update that ref), which then doesn't even record a transaction + * regarding that ref. Make sure all commands are without error + * and then commit atomically. */ + for (cmd = commands; cmd; cmd = cmd->next) + if (cmd->error_string) + break; + if (cmd) { + for (cmd = commands; cmd; cmd = cmd->next) + if (!cmd->error_string) + cmd->error_string = "atomic push failure"; + } else if (ref_transaction_commit(transaction, &err)) { rp_error("%s", err.buf); for (cmd = commands; cmd; cmd = cmd->next) cmd->error_string = err.buf; diff --git a/t/t5543-atomic-push.sh b/t/t5543-atomic-push.sh index 6354fc0..f0e54d9 100755 --- a/t/t5543-atomic-push.sh +++ b/t/t5543-atomic-push.sh @@ -142,7 +142,7 @@ test_expect_success 'atomic push fails if one tag fails remotely' ' test_ref_upstream second $(git -C workbench rev-parse --verify HEAD@{1}) ' -test_expect_failure 'atomic push obeys update hook preventing a branch to be pushed' ' +test_expect_success 'atomic push obeys update hook preventing a branch to be pushed' ' mk_repo_pair && ( cd workbench && -- 2.2.0.31.gad78000.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html