aboutsummaryrefslogtreecommitdiff
path: root/remote.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-01-23 13:14:48 -0800
committerJunio C Hamano <gitster@pobox.com>2013-01-24 14:37:22 -0800
commit0f4d498dbecbc1b6da66f926df3bc12446bd44dd (patch)
tree937edd65fc34ff8d97ef1e54aec900403eaddca3 /remote.c
parent5ece083fc7ffd60d38b9abf7797fbf00decd2bcc (diff)
downloadgit-0f4d498dbecbc1b6da66f926df3bc12446bd44dd.tar.gz
git-0f4d498dbecbc1b6da66f926df3bc12446bd44dd.tar.xz
push: further simplify the logic to assign rejection reason
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>
Diffstat (limited to 'remote.c')
-rw-r--r--remote.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/remote.c b/remote.c
index 3375914ab..969aa1169 100644
--- a/remote.c
+++ b/remote.c
@@ -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;
- }
}
}
}