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 <peff@xxxxxxxx> > --- > 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; > +} > + []