diff options
author | Jeff King <peff@peff.net> | 2013-07-10 07:46:25 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-07-12 09:18:42 -0700 |
commit | a4ac1061783d25db4253309d2b58b9c2b89401d7 (patch) | |
tree | a7fcbe4bd73f9f03593393f550a22502b51105ad /builtin/cat-file.c | |
parent | 93d2a607ba05fba31442941d0425019120993846 (diff) | |
download | git-a4ac1061783d25db4253309d2b58b9c2b89401d7.tar.gz git-a4ac1061783d25db4253309d2b58b9c2b89401d7.tar.xz |
cat-file: add %(objectsize:disk) format atom
This atom is just like %(objectsize), except that it shows
the on-disk size of the object rather than the object's true
size. In other words, it makes the "disk_size" query of
sha1_object_info_extended available via the command-line.
This can be used for rough attribution of disk usage to
particular refs, though see the caveats in the
documentation.
This patch does not include any tests, as the exact numbers
returned are volatile and subject to zlib and packing
decisions. We cannot even reliably guarantee that the
on-disk size is smaller than the object content (though in
general this should be the case for non-trivial objects).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/cat-file.c')
-rw-r--r-- | builtin/cat-file.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/builtin/cat-file.c b/builtin/cat-file.c index b43a0c504..11fa8c08b 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -118,6 +118,7 @@ struct expand_data { unsigned char sha1[20]; enum object_type type; unsigned long size; + unsigned long disk_size; /* * If mark_query is true, we do not expand anything, but rather @@ -155,6 +156,11 @@ static void expand_atom(struct strbuf *sb, const char *atom, int len, data->info.sizep = &data->size; else strbuf_addf(sb, "%lu", data->size); + } else if (is_atom("objectsize:disk", atom, len)) { + if (data->mark_query) + data->info.disk_sizep = &data->disk_size; + else + strbuf_addf(sb, "%lu", data->disk_size); } else die("unknown format element: %.*s", len, atom); } |