send-pack: always allocate receive status

In `receive_status()`, we record the reason why ref updates have been
rejected by the remote via the `remote_status`. But while we allocate
the assigned string when a reason was given, we assign a string constant
when no reason was given.

This has been working fine so far due to two reasons:

  - We don't ever free the refs in git-send-pack(1)'

  - Remotes always give a reason, at least as implemented by Git proper.

Adapt the code to always allocate the receive status string and free the
refs.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-06-07 08:38:58 +02:00 committed by Junio C Hamano
parent e463c5e8a0
commit 5bd0851d97
2 changed files with 3 additions and 1 deletions

View file

@ -336,5 +336,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix)
/* stable plumbing output; do not modify or localize */
fprintf(stderr, "Everything up-to-date\n");
free_refs(remote_refs);
free_refs(local_refs);
return ret;
}

View file

@ -259,7 +259,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
if (p)
hint->remote_status = xstrdup(p);
else
hint->remote_status = "failed";
hint->remote_status = xstrdup("failed");
} else {
hint->status = REF_STATUS_OK;
hint->remote_status = xstrdup_or_null(p);