| 558 | } |
| 559 | |
| 560 | struct ref **get_remote_refs(int fd_out, struct packet_reader *reader, |
| 561 | struct ref **list, int for_push, |
| 562 | struct transport_ls_refs_options *transport_options, |
| 563 | const struct string_list *server_options, |
| 564 | int stateless_rpc) |
| 565 | { |
| 566 | size_t i; |
| 567 | struct strvec *ref_prefixes = transport_options ? |
| 568 | &transport_options->ref_prefixes : NULL; |
| 569 | const char **unborn_head_target = transport_options ? |
| 570 | &transport_options->unborn_head_target : NULL; |
| 571 | *list = NULL; |
| 572 | |
| 573 | ensure_server_supports_v2("ls-refs"); |
| 574 | packet_write_fmt(fd_out, "command=ls-refs\n"); |
| 575 | |
| 576 | /* Send capabilities */ |
| 577 | send_capabilities(fd_out, reader); |
| 578 | |
| 579 | if (server_options && server_options->nr) { |
| 580 | ensure_server_supports_v2("server-option"); |
| 581 | for (i = 0; i < server_options->nr; i++) |
| 582 | packet_write_fmt(fd_out, "server-option=%s", |
| 583 | server_options->items[i].string); |
| 584 | } |
| 585 | |
| 586 | packet_delim(fd_out); |
| 587 | /* When pushing we don't want to request the peeled tags */ |
| 588 | if (!for_push) |
| 589 | packet_write_fmt(fd_out, "peel\n"); |
| 590 | packet_write_fmt(fd_out, "symrefs\n"); |
| 591 | if (server_supports_feature("ls-refs", "unborn", 0)) |
| 592 | packet_write_fmt(fd_out, "unborn\n"); |
| 593 | for (i = 0; ref_prefixes && i < ref_prefixes->nr; i++) { |
| 594 | packet_write_fmt(fd_out, "ref-prefix %s\n", |
| 595 | ref_prefixes->v[i]); |
| 596 | } |
| 597 | packet_flush(fd_out); |
| 598 | |
| 599 | /* Process response from server */ |
| 600 | while (packet_reader_read(reader) == PACKET_READ_NORMAL) { |
| 601 | if (!process_ref_v2(reader, &list, unborn_head_target)) |
| 602 | die(_("invalid ls-refs response: %s"), reader->line); |
| 603 | } |
| 604 | |
| 605 | if (reader->status != PACKET_READ_FLUSH) |
| 606 | die(_("expected flush after ref listing")); |
| 607 | |
| 608 | check_stateless_delimiter(stateless_rpc, reader, |
| 609 | _("expected response end packet after ref listing")); |
| 610 | |
| 611 | return list; |
| 612 | } |
| 613 | |
| 614 | const char *parse_feature_value(const char *feature_list, const char *feature, size_t *lenp, size_t *offset) |
| 615 | { |
no test coverage detected