send-pack: refactor decision to send update per ref
A new helper function ref_update_to_be_sent() decides for each ref if the update is to be sent based on the status previously set by set_ref_status_for_push() and also if this is a mirrored push. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
621b0599fd
commit
e40671a3d9
36
send-pack.c
36
send-pack.c
@ -190,6 +190,26 @@ static void advertise_shallow_grafts_buf(struct strbuf *sb)
|
|||||||
for_each_commit_graft(advertise_shallow_grafts_cb, sb);
|
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)
|
||||||
|
{
|
||||||
|
if (!ref->peer_ref && !args->send_mirror)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Check for statuses set by set_ref_status_for_push() */
|
||||||
|
switch (ref->status) {
|
||||||
|
case REF_STATUS_REJECT_NONFASTFORWARD:
|
||||||
|
case REF_STATUS_REJECT_ALREADY_EXISTS:
|
||||||
|
case REF_STATUS_REJECT_FETCH_FIRST:
|
||||||
|
case REF_STATUS_REJECT_NEEDS_FORCE:
|
||||||
|
case REF_STATUS_REJECT_STALE:
|
||||||
|
case REF_STATUS_REJECT_NODELETE:
|
||||||
|
case REF_STATUS_UPTODATE:
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int send_pack(struct send_pack_args *args,
|
int send_pack(struct send_pack_args *args,
|
||||||
int fd[], struct child_process *conn,
|
int fd[], struct child_process *conn,
|
||||||
struct ref *remote_refs,
|
struct ref *remote_refs,
|
||||||
@ -248,23 +268,9 @@ int send_pack(struct send_pack_args *args,
|
|||||||
*/
|
*/
|
||||||
new_refs = 0;
|
new_refs = 0;
|
||||||
for (ref = remote_refs; ref; ref = ref->next) {
|
for (ref = remote_refs; ref; ref = ref->next) {
|
||||||
if (!ref->peer_ref && !args->send_mirror)
|
if (!ref_update_to_be_sent(ref, args))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Check for statuses set by set_ref_status_for_push() */
|
|
||||||
switch (ref->status) {
|
|
||||||
case REF_STATUS_REJECT_NONFASTFORWARD:
|
|
||||||
case REF_STATUS_REJECT_ALREADY_EXISTS:
|
|
||||||
case REF_STATUS_REJECT_FETCH_FIRST:
|
|
||||||
case REF_STATUS_REJECT_NEEDS_FORCE:
|
|
||||||
case REF_STATUS_REJECT_STALE:
|
|
||||||
case REF_STATUS_REJECT_NODELETE:
|
|
||||||
case REF_STATUS_UPTODATE:
|
|
||||||
continue;
|
|
||||||
default:
|
|
||||||
; /* do nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ref->deletion)
|
if (!ref->deletion)
|
||||||
new_refs++;
|
new_refs++;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user