@@ -256,13 +256,20 @@ int git_smart__detect_caps(
256256 return 0 ;
257257}
258258
259- static int recv_pkt (git_pkt * * out_pkt , git_pkt_type * out_type , gitno_buffer * buf )
259+ static int recv_pkt (
260+ git_pkt * * out_pkt ,
261+ git_pkt_type * out_type ,
262+ transport_smart * t ,
263+ gitno_buffer * buf )
260264{
261265 const char * ptr = buf -> data , * line_end = ptr ;
262266 git_pkt * pkt = NULL ;
263267 git_pkt_parse_data pkt_parse_data = { 0 };
264268 int error = 0 , ret ;
265269
270+ pkt_parse_data .oid_type = t -> owner -> repo -> oid_type ;
271+ pkt_parse_data .seen_capabilities = 1 ;
272+
266273 do {
267274 if (buf -> offset > 0 )
268275 error = git_pkt_parse_line (& pkt , & line_end , ptr , buf -> offset , & pkt_parse_data );
@@ -303,7 +310,7 @@ static int store_common(transport_smart *t)
303310 int error ;
304311
305312 do {
306- if ((error = recv_pkt (& pkt , NULL , buf )) < 0 )
313+ if ((error = recv_pkt (& pkt , NULL , t , buf )) < 0 )
307314 return error ;
308315
309316 if (pkt -> type != GIT_PKT_ACK ) {
@@ -320,7 +327,7 @@ static int store_common(transport_smart *t)
320327 return 0 ;
321328}
322329
323- static int wait_while_ack (gitno_buffer * buf )
330+ static int wait_while_ack (transport_smart * t , gitno_buffer * buf )
324331{
325332 int error ;
326333 git_pkt * pkt = NULL ;
@@ -329,7 +336,7 @@ static int wait_while_ack(gitno_buffer *buf)
329336 while (1 ) {
330337 git_pkt_free (pkt );
331338
332- if ((error = recv_pkt (& pkt , NULL , buf )) < 0 )
339+ if ((error = recv_pkt (& pkt , NULL , t , buf )) < 0 )
333340 return error ;
334341
335342 if (pkt -> type == GIT_PKT_NAK )
@@ -400,8 +407,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
400407 if ((error = git_smart__negotiation_step (& t -> parent , data .ptr , data .size )) < 0 )
401408 goto on_error ;
402409
403- while ((error = recv_pkt ((git_pkt * * )& pkt , NULL , buf )) == 0 ) {
404-
410+ while ((error = recv_pkt ((git_pkt * * )& pkt , NULL , t , buf )) == 0 ) {
405411 if (pkt -> type == GIT_PKT_SHALLOW ) {
406412 git_shallowarray_add (wants -> shallow_roots , & pkt -> oid );
407413 } else if (pkt -> type == GIT_PKT_UNSHALLOW ) {
@@ -463,7 +469,7 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
463469 if ((error = store_common (t )) < 0 )
464470 goto on_error ;
465471 } else {
466- if ((error = recv_pkt (NULL , & pkt_type , buf )) < 0 )
472+ if ((error = recv_pkt (NULL , & pkt_type , t , buf )) < 0 )
467473 goto on_error ;
468474
469475 if (pkt_type == GIT_PKT_ACK ) {
@@ -535,15 +541,15 @@ int git_smart__negotiate_fetch(git_transport *transport, git_repository *repo, c
535541
536542 /* Now let's eat up whatever the server gives us */
537543 if (!t -> caps .multi_ack && !t -> caps .multi_ack_detailed ) {
538- if ((error = recv_pkt (NULL , & pkt_type , buf )) < 0 )
544+ if ((error = recv_pkt (NULL , & pkt_type , t , buf )) < 0 )
539545 return error ;
540546
541547 if (pkt_type != GIT_PKT_ACK && pkt_type != GIT_PKT_NAK ) {
542548 git_error_set (GIT_ERROR_NET , "unexpected pkt type" );
543549 return -1 ;
544550 }
545551 } else {
546- error = wait_while_ack (buf );
552+ error = wait_while_ack (t , buf );
547553 }
548554
549555 return error ;
@@ -659,7 +665,7 @@ int git_smart__download_pack(
659665 goto done ;
660666 }
661667
662- if ((error = recv_pkt (& pkt , NULL , buf )) >= 0 ) {
668+ if ((error = recv_pkt (& pkt , NULL , t , buf )) >= 0 ) {
663669 /* Check cancellation after network call */
664670 if (t -> cancelled .val ) {
665671 git_error_clear ();
0 commit comments