Add new formatting option objectsize:disk to know
exact size that object takes up on disk.

Signed-off-by: Olga Telezhnaia <olyatelezhn...@gmail.com>
---
 ref-filter.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/ref-filter.c b/ref-filter.c
index 0c45ed9d94a4b..8ba1a4e72f2c3 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -231,12 +231,18 @@ static int objecttype_atom_parser(const struct ref_format 
*format, struct used_a
 static int objectsize_atom_parser(const struct ref_format *format, struct 
used_atom *atom,
                                  const char *arg, struct strbuf *err)
 {
-       if (arg)
-               return strbuf_addf_ret(err, -1, _("%%(objectsize) does not take 
arguments"));
-       if (*atom->name == '*')
-               oi_deref.info.sizep = &oi_deref.size;
-       else
-               oi.info.sizep = &oi.size;
+       if (!arg) {
+               if (*atom->name == '*')
+                       oi_deref.info.sizep = &oi_deref.size;
+               else
+                       oi.info.sizep = &oi.size;
+       } else if (!strcmp(arg, "disk")) {
+               if (*atom->name == '*')
+                       oi_deref.info.disk_sizep = &oi_deref.disk_size;
+               else
+                       oi.info.disk_sizep = &oi.disk_size;
+       } else
+               return strbuf_addf_ret(err, -1, _("unrecognized %%(objectsize) 
argument: %s"), arg);
        return 0;
 }
 
@@ -876,11 +882,13 @@ static void grab_common_values(struct atom_value *val, 
int deref, struct expand_
                        name++;
                if (!strcmp(name, "objecttype"))
                        v->s = xstrdup(type_name(oi->type));
-               else if (!strcmp(name, "objectsize")) {
+               else if (!strcmp(name, "objectsize:disk")) {
+                       v->value = oi->disk_size;
+                       v->s = xstrfmt("%lld", (long long)oi->disk_size);
+               } else if (!strcmp(name, "objectsize")) {
                        v->value = oi->size;
                        v->s = xstrfmt("%lu", oi->size);
-               }
-               else if (deref)
+               } else if (deref)
                        grab_objectname(name, &oi->oid, v, &used_atom[i]);
        }
 }

--
https://github.com/git/git/pull/552

Reply via email to