diff options
-rw-r--r-- | Documentation/git-cat-file.txt | 18 | ||||
-rw-r--r-- | builtin/cat-file.c | 6 |
2 files changed, 24 insertions, 0 deletions
diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt index 7c57eca9b0..10fbc6a373 100644 --- a/Documentation/git-cat-file.txt +++ b/Documentation/git-cat-file.txt @@ -106,6 +106,10 @@ newline. The available atoms are: The size, in bytes, of the object (the same as `cat-file -s` reports). +`objectsize:disk`:: + The size, in bytes, that the object takes up on disk. See the + note about on-disk sizes in the `CAVEATS` section below. + If no format is specified, the default format is `%(objectname) %(objecttype) %(objectsize)`. @@ -133,6 +137,20 @@ the repository, then `cat-file` will ignore any custom format and print: <object> SP missing LF ------------ + +CAVEATS +------- + +Note that the sizes of objects on disk are reported accurately, but care +should be taken in drawing conclusions about which refs or objects are +responsible for disk usage. The size of a packed non-delta object may be +much larger than the size of objects which delta against it, but the +choice of which object is the base and which is the delta is arbitrary +and is subject to change during a repack. Note also that multiple copies +of an object may be present in the object database; in this case, it is +undefined which copy's size will be reported. + + GIT --- Part of the linkgit:git[1] suite diff --git a/builtin/cat-file.c b/builtin/cat-file.c index b43a0c5040..11fa8c08bc 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); } |