for_each_commit_graft(advertise_shallow_grafts_cb, sb);
 }
 
-static int ref_update_to_be_sent(const struct ref *ref, const struct send_pack_args *args)
+#define CHECK_REF_NO_PUSH -1
+#define CHECK_REF_STATUS_REJECTED -2
+#define CHECK_REF_UPTODATE -3
+static int check_to_send_update(const struct ref *ref, const struct send_pack_args *args)
 {
        if (!ref->peer_ref && !args->send_mirror)
-               return 0;
+               return CHECK_REF_NO_PUSH;
 
        /* Check for statuses set by set_ref_status_for_push() */
        switch (ref->status) {
        case REF_STATUS_REJECT_NEEDS_FORCE:
        case REF_STATUS_REJECT_STALE:
        case REF_STATUS_REJECT_NODELETE:
+               return CHECK_REF_STATUS_REJECTED;
        case REF_STATUS_UPTODATE:
-               return 0;
+               return CHECK_REF_UPTODATE;
        default:
-               return 1;
+               return 0;
        }
 }
 
        strbuf_addstr(&cert, "\n");
 
        for (ref = remote_refs; ref; ref = ref->next) {
-               if (!ref_update_to_be_sent(ref, args))
+               if (check_to_send_update(ref, args) < 0)
                        continue;
                update_seen = 1;
                strbuf_addf(&cert, "%s %s %s\n",
         * the pack data.
         */
        for (ref = remote_refs; ref; ref = ref->next) {
-               if (!ref_update_to_be_sent(ref, args))
+               if (check_to_send_update(ref, args) < 0)
                        continue;
 
                if (!ref->deletion)
                if (args->dry_run || args->push_cert)
                        continue;
 
-               if (!ref_update_to_be_sent(ref, args))
+               if (check_to_send_update(ref, args) < 0)
                        continue;
 
                old_hex = sha1_to_hex(ref->old_sha1);