Skip to content

Commit

Permalink
push: further simplify the logic to assign rejection reason
Browse files Browse the repository at this point in the history
First compute the reason why this push would fail if done without
"--force", and then fail it by assigning that reason when the push
was not forced (or if there is no reason to require force, allow it
to succeed).

Record the fact that the push was forced in the forced_update field
only when the push would have failed without the option.

The code becomes shorter, less repetitive and easier to read this
way, especially given that the set of rejection reasons will be
extended in a later patch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Jan 24, 2013
1 parent 5ece083 commit 0f4d498
Showing 1 changed file with 11 additions and 16 deletions.
27 changes: 11 additions & 16 deletions remote.c
Expand Up @@ -1318,23 +1318,18 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
*/

if (!ref->deletion && !is_null_sha1(ref->old_sha1)) {
int nonfastforward =
!has_sha1_file(ref->old_sha1)
|| !ref_newer(ref->new_sha1, ref->old_sha1);

if (!prefixcmp(ref->name, "refs/tags/")) {
if (!force_ref_update) {
ref->status = REF_STATUS_REJECT_ALREADY_EXISTS;
continue;
}
ref->forced_update = 1;
} else if (nonfastforward) {
if (!force_ref_update) {
ref->status = REF_STATUS_REJECT_NONFASTFORWARD;
continue;
}
int why = 0; /* why would this push require --force? */

if (!prefixcmp(ref->name, "refs/tags/"))
why = REF_STATUS_REJECT_ALREADY_EXISTS;
else if (!has_sha1_file(ref->old_sha1)
|| !ref_newer(ref->new_sha1, ref->old_sha1))
why = REF_STATUS_REJECT_NONFASTFORWARD;

if (!force_ref_update)
ref->status = why;
else if (why)
ref->forced_update = 1;
}
}
}
}
Expand Down

0 comments on commit 0f4d498

Please sign in to comment.