ref-filter: add objectsize:disk option

Add new formatting option objectsize:disk to know exact size that object takes up on disk. Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Olga Telezhnaya committed Dec 24, 2018 at 13:24 UTC 1867ce6cbec9c8f23f958cb675de129fcd6471a4
1 file changed +16 -7
ref-filter.c
+16 -7
@@ -231,12 +231,18 @@ static int objecttype_atom_parser(const struct ref_format *format, struct used_a
231 static int objectsize_atom_parser(const struct ref_format *format, struct used_atom *atom,
232 const char *arg, struct strbuf *err)
233 {
234 - if (arg)
235 - return strbuf_addf_ret(err, -1, _("%%(objectsize) does not take arguments"));
236 - if (*atom->name == '*')
237 - oi_deref.info.sizep = &oi_deref.size;
238 - else
239 - oi.info.sizep = &oi.size;
234 + if (!arg) {
235 + if (*atom->name == '*')
236 + oi_deref.info.sizep = &oi_deref.size;
237 + else
238 + oi.info.sizep = &oi.size;
239 + } else if (!strcmp(arg, "disk")) {
240 + if (*atom->name == '*')
241 + oi_deref.info.disk_sizep = &oi_deref.disk_size;
242 + else
243 + oi.info.disk_sizep = &oi.disk_size;
244 + } else
245 + return strbuf_addf_ret(err, -1, _("unrecognized %%(objectsize) argument: %s"), arg);
246 return 0;
247 }
248
@@ -876,7 +882,10 @@ static void grab_common_values(struct atom_value *val, int deref, struct expand_
882 name++;
883 if (!strcmp(name, "objecttype"))
884 v->s = xstrdup(type_name(oi->type));
879 - else if (!strcmp(name, "objectsize")) {
885 + else if (!strcmp(name, "objectsize:disk")) {
886 + v->value = oi->disk_size;
887 + v->s = xstrfmt("%"PRIuMAX, (intmax_t)oi->disk_size);
888 + } else if (!strcmp(name, "objectsize")) {
889 v->value = oi->size;
890 v->s = xstrfmt("%lu", oi->size);
891 }