From: Junio C Hamano <gitster@pobox.com>
To: "Randall S. Becker" <the.n.e.key@gmail.com>
Cc: git@vger.kernel.org, "Randall S. Becker" <rsbecker@nexbridge.com>
Subject: Re: [PATCH v2 1/3] builtin/repack.c: change xwrite to write_in_full and report errors.
Date: Tue, 27 Feb 2024 10:49:29 -0800 [thread overview]
Message-ID: <xmqq5xy9spxi.fsf@gitster.g> (raw)
In-Reply-To: <20240227150934.7950-2-randall.becker@nexbridge.ca> (Randall S. Becker's message of "Tue, 27 Feb 2024 10:09:32 -0500")
"Randall S. Becker" <the.n.e.key@gmail.com> writes:
> From: "Randall S. Becker" <rsbecker@nexbridge.com>
>
> This change is required because some platforms do not support file writes of
> arbitrary sizes (e.g, NonStop). xwrite ends up truncating the output to the
> maximum single I/O size possible for the destination device. The result of
> write_in_full() is also passed to the caller, which was previously ignored.
This misleads readers to think that maximum single I/O size is
smaller than a single write of oid_to_hex() string on some
platforms. I somehow do not think that is why we want to make this
change.
Rather, the use of these xwrites() are simply wrong regardless of
maximum I/O size of the platforms, as this caller is not prepared to
see xwrite() result in a short write(2), and we do want to write all
bytes we have even in such a case.
You're right to also point out that we attempt to propagate the errors
to the caller (but see below).
> Signed-off-by: Randall S. Becker <rsbecker@nexbridge.com>
> ---
> builtin/repack.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/repack.c b/builtin/repack.c
> index ede36328a3..932d24c60b 100644
> --- a/builtin/repack.c
> +++ b/builtin/repack.c
> @@ -307,6 +307,7 @@ static int write_oid(const struct object_id *oid,
> struct packed_git *pack UNUSED,
> uint32_t pos UNUSED, void *data)
> {
> + int err;
> struct child_process *cmd = data;
>
> if (cmd->in == -1) {
> @@ -314,8 +315,12 @@ static int write_oid(const struct object_id *oid,
> die(_("could not start pack-objects to repack promisor objects"));
> }
>
> - xwrite(cmd->in, oid_to_hex(oid), the_hash_algo->hexsz);
> - xwrite(cmd->in, "\n", 1);
> + err = write_in_full(cmd->in, oid_to_hex(oid), the_hash_algo->hexsz);
> + if (err <= 0)
> + return err;
> + err = write_in_full(cmd->in, "\n", 1);
> + if (err <= 0)
> + return err;
> return 0;
> }
I think this has already been brought up, but the caller of this
helper does not make such an error stand out enough and instead
makes the resulting repack silently produce wrong result, which
is not an improvement. Perhaps
if (write_in_full(...) ||
write_in_full(...))
die(_("failed to list promisor objects to repack"));
or something?
Thanks.
next prev parent reply other threads:[~2024-02-27 18:49 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 15:09 [PATCH v2 0/2] Change xwrite() to write_in_full() in builtins Randall S. Becker
2024-02-27 15:09 ` [PATCH v2 1/3] builtin/repack.c: change xwrite to write_in_full and report errors Randall S. Becker
2024-02-27 18:49 ` Junio C Hamano [this message]
2024-02-27 15:09 ` [PATCH v2 2/3] builtin/receive-pack.c: change xwrite to write_in_full Randall S. Becker
2024-02-27 19:00 ` Junio C Hamano
2024-02-27 15:09 ` [PATCH v2 3/3] builtin/unpack-objects.c: change xwrite to write_in_full avoid truncation Randall S. Becker
2024-02-27 18:58 ` Junio C Hamano
2024-02-27 19:04 ` rsbecker
2024-02-27 19:25 ` Jeff King
2024-02-27 21:05 ` rsbecker
2024-03-07 10:00 ` Jeff King
2024-02-27 21:11 ` [PATCH v2 0/2] Change xwrite() to write_in_full() in builtins rsbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq5xy9spxi.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=rsbecker@nexbridge.com \
--cc=the.n.e.key@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).