diff options
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/cat-file.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 1434afbd4d..f8288c830c 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -197,6 +197,8 @@ static void print_object_or_die(int fd, struct expand_data *data) { const unsigned char *sha1 = data->sha1; + assert(data->info.typep); + if (data->type == OBJ_BLOB) { if (stream_blob_to_fd(fd, sha1, NULL, 0) < 0) die("unable to stream %s to stdout", sha1_to_hex(sha1)); @@ -211,7 +213,7 @@ static void print_object_or_die(int fd, struct expand_data *data) die("object %s disappeared", sha1_to_hex(sha1)); if (type != data->type) die("object %s changed type!?", sha1_to_hex(sha1)); - if (size != data->size) + if (data->info.sizep && size != data->size) die("object %s changed size!?", sha1_to_hex(sha1)); write_or_die(fd, contents, size); @@ -276,6 +278,13 @@ static int batch_objects(struct batch_options *opt) data.mark_query = 0; /* + * If we are printing out the object, then always fill in the type, + * since we will want to decide whether or not to stream. + */ + if (opt->print_contents) + data.info.typep = &data.type; + + /* * We are going to call get_sha1 on a potentially very large number of * objects. In most large cases, these will be actual object sha1s. The * cost to double-check that each one is not also a ref (just so we can |