Re: [PATCH 3/3] cat-file: handle streaming failures consistently
- From
Torsten Bögershausen <tboegi@web.de>
- Date
- Oct 31, 2018, 13:33 UTC
- Message-ID
- <20181031133341.GA5070@tor.lan>
- In-Reply-To
- <20181030232337.GC32038@sigill.intra.peff.net>
On Tue, Oct 30, 2018 at 07:23:38PM -0400, Jeff King wrote:
Show 35 quoted lines
> 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 <peff@peff.net> > --- > 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;
> +}
> +[]