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>

Junio C Hamano committed Aug 12, 2014 at 15:40 UTC e40671a3d9115f2c0cea614d8b5d265150f44c24
1 file changed +21 -15
send-pack.c
+21 -15
@@ -190,6 +190,26 @@ static void advertise_shallow_grafts_buf(struct strbuf *sb)
190 for_each_commit_graft(advertise_shallow_grafts_cb, sb);
191 }
192
193 +static int ref_update_to_be_sent(const struct ref *ref, const struct send_pack_args *args)
194 +{
195 + if (!ref->peer_ref && !args->send_mirror)
196 + return 0;
197 +
198 + /* Check for statuses set by set_ref_status_for_push() */
199 + switch (ref->status) {
200 + case REF_STATUS_REJECT_NONFASTFORWARD:
201 + case REF_STATUS_REJECT_ALREADY_EXISTS:
202 + case REF_STATUS_REJECT_FETCH_FIRST:
203 + case REF_STATUS_REJECT_NEEDS_FORCE:
204 + case REF_STATUS_REJECT_STALE:
205 + case REF_STATUS_REJECT_NODELETE:
206 + case REF_STATUS_UPTODATE:
207 + return 0;
208 + default:
209 + return 1;
210 + }
211 +}
212 +
213 int send_pack(struct send_pack_args *args,
214 int fd[], struct child_process *conn,
215 struct ref *remote_refs,
@@ -248,23 +268,9 @@ int send_pack(struct send_pack_args *args,
268 */
269 new_refs = 0;
270 for (ref = remote_refs; ref; ref = ref->next) {
251 - if (!ref->peer_ref && !args->send_mirror)
271 + if (!ref_update_to_be_sent(ref, args))
272 continue;
273
254 - /* Check for statuses set by set_ref_status_for_push() */
255 - switch (ref->status) {
256 - case REF_STATUS_REJECT_NONFASTFORWARD:
257 - case REF_STATUS_REJECT_ALREADY_EXISTS:
258 - case REF_STATUS_REJECT_FETCH_FIRST:
259 - case REF_STATUS_REJECT_NEEDS_FORCE:
260 - case REF_STATUS_REJECT_STALE:
261 - case REF_STATUS_REJECT_NODELETE:
262 - case REF_STATUS_UPTODATE:
263 - continue;
264 - default:
265 - ; /* do nothing */
266 - }
267 -
274 if (!ref->deletion)
275 new_refs++;
276