diff --git a/src/push.c b/src/push.c index c6a93ba2f..d4171bbd6 100644 --- a/src/push.c +++ b/src/push.c @@ -180,6 +180,10 @@ int git_push_update_tips(git_push *push) git_vector_foreach(&push->status, i, status) { int fire_callback = 1; + /* Skip unsuccessful updates which have non-empty messages */ + if (status->msg) + continue; + /* Find the corresponding remote ref */ fetch_spec = git_remote__matching_refspec(push->remote, status->ref); if (!fetch_spec) @@ -198,21 +202,18 @@ int git_push_update_tips(git_push *push) if (j == push->specs.length) continue; - /* If this ref update was successful (ok, not ng), it will have an empty message */ - if (status->msg == NULL) { - /* Update the remote ref */ - if (git_oid_iszero(&push_spec->loid)) { - error = git_reference_lookup(&remote_ref, push->remote->repo, git_buf_cstr(&remote_ref_name)); + /* Update the remote ref */ + if (git_oid_iszero(&push_spec->loid)) { + error = git_reference_lookup(&remote_ref, push->remote->repo, git_buf_cstr(&remote_ref_name)); - if (error >= 0) { - error = git_reference_delete(remote_ref); - git_reference_free(remote_ref); - } - } else { - error = git_reference_create(NULL, push->remote->repo, - git_buf_cstr(&remote_ref_name), &push_spec->loid, 1, - "update by push"); + if (error >= 0) { + error = git_reference_delete(remote_ref); + git_reference_free(remote_ref); } + } else { + error = git_reference_create(NULL, push->remote->repo, + git_buf_cstr(&remote_ref_name), &push_spec->loid, 1, + "update by push"); } if (error < 0) {