* [PATCH] send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higher
@ 2014-08-12 22:13 Junio C Hamano
0 siblings, 0 replies; only message in thread
From: Junio C Hamano @ 2014-08-12 22:13 UTC (permalink / raw)
To: git
This is more of an RFH than a PATCH. I think we would want to
encapsulate the logic to set STATUS_REJECT_NODELETE in
set_ref_status_for_push() function, but I do not see a good code
structure to do so, given the constraints of the dataflow (i.e. the
protocol capability is only inspected here with server_supports()).
The motivation behind this patch is that I want to move the "Among
refs on remote_refs list, these are not going to be updated on the
remote end" logic into a separate helper function in the next step
and call that before we enter in this per-ref main loop.
-- >8 --
20e8b465 (refactor ref status logic for pushing, 2010-01-08)
restructured the code to set status for each ref to be pushed, but
did not quite go far enough. We inspect the status set earlier by
set_refs_status_for_push() and then perform yet another update to
the status of a ref with an otherwise OK status to be deleted to
mark it with REF_STATUS_REJECT_NODELETE when the protocol tells us
never to delete.
Split the latter into a separate loop that comes before we enter the
per-ref loop. This way we would have one less condition to check in
the main loop.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
send-pack.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/send-pack.c b/send-pack.c
index 6129b0f..51497c3 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -231,6 +231,14 @@ int send_pack(struct send_pack_args *args,
return 0;
}
+ /*
+ * Why is delete-refs so specific to send-pack machinery
+ * that set_ref_status_for_push() cannot set this bit for us???
+ */
+ for (ref = remote_refs; ref; ref = ref->next)
+ if (ref->deletion && !allow_deleting_refs)
+ ref->status = REF_STATUS_REJECT_NODELETE;
+
if (!args->dry_run)
advertise_shallow_grafts_buf(&req_buf);
@@ -249,17 +257,13 @@ int send_pack(struct send_pack_args *args,
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 && !allow_deleting_refs) {
- ref->status = REF_STATUS_REJECT_NODELETE;
- continue;
- }
-
if (!ref->deletion)
new_refs++;
--
2.1.0-rc2-243-g9c8a734
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2014-08-12 22:13 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-12 22:13 [PATCH] send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higher Junio C Hamano
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.