On Tue, Oct 30, 2018 at 07:23:38PM -0400, Jeff King wrote:
> There are three ways to convince cat-file to stream a blob:
>
> - cat-file -p $blob
>
> - cat-file blob $blob
>
> - echo $batch | cat-file --batch
>
> In the first two, we simply exit with the error code of
> streaw_blob_to_fd(). That means that an error will cause us
> to exit with "-1" (which we try to avoid) without printing
> any kind of error message (which is confusing to the user).
>
> Instead, let's match the third case, which calls die() on an
> error. Unfortunately we cannot be more specific, as
> stream_blob_to_fd() does not tell us whether the problem was
> on reading (e.g., a corrupt object) or on writing (e.g.,
> ENOSPC). That might be an opportunity for future work, but
> for now we will at least exit with a sane message and exit
> code.
>
> Signed-off-by: Jeff King <[email protected]>
> ---
> builtin/cat-file.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/cat-file.c b/builtin/cat-file.c
> index 8d97c84725..0d403eb77d 100644
> --- a/builtin/cat-file.c
> +++ b/builtin/cat-file.c
> @@ -50,6 +50,13 @@ static int filter_object(const char *path, unsigned mode,
> return 0;
> }
>
> +static int stream_blob(const struct object_id *oid)
Sorry for nit-picking:
could this be renamed into stream_blob_to_stdout() ?
> +{
> + if (stream_blob_to_fd(1, oid, NULL, 0))
And I wonder if we could make things clearer:
s/1/STDOUT_FILENO/
(Stolen from fast-import.c)
> + die("unable to stream %s to stdout", oid_to_hex(oid));
> + return 0;
> +}
> +
[]