summaryrefslogtreecommitdiff
path: root/ref-filter.c
diff options
context:
space:
mode:
Diffstat (limited to 'ref-filter.c')
-rw-r--r--ref-filter.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/ref-filter.c b/ref-filter.c
index e2eac50d95..8cb622b95d 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -146,6 +146,9 @@ static struct used_atom {
enum { O_FULL, O_LENGTH, O_SHORT } option;
unsigned int length;
} oid;
+ struct {
+ enum { O_SIZE, O_SIZE_DISK } option;
+ } objectsize;
struct email_option {
enum { EO_RAW, EO_TRIM, EO_LOCALPART } option;
} email_option;
@@ -269,11 +272,13 @@ static int objectsize_atom_parser(const struct ref_format *format, struct used_a
const char *arg, struct strbuf *err)
{
if (!arg) {
+ atom->u.objectsize.option = O_SIZE;
if (*atom->name == '*')
oi_deref.info.sizep = &oi_deref.size;
else
oi.info.sizep = &oi.size;
} else if (!strcmp(arg, "disk")) {
+ atom->u.objectsize.option = O_SIZE_DISK;
if (*atom->name == '*')
oi_deref.info.disk_sizep = &oi_deref.disk_size;
else
@@ -967,12 +972,14 @@ 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:disk")) {
- v->value = oi->disk_size;
- v->s = xstrfmt("%"PRIuMAX, (uintmax_t)oi->disk_size);
- } else if (!strcmp(name, "objectsize")) {
- v->value = oi->size;
- v->s = xstrfmt("%"PRIuMAX , (uintmax_t)oi->size);
+ else if (starts_with(name, "objectsize")) {
+ if (used_atom[i].u.objectsize.option == O_SIZE_DISK) {
+ v->value = oi->disk_size;
+ v->s = xstrfmt("%"PRIuMAX, (uintmax_t)oi->disk_size);
+ } else if (used_atom[i].u.objectsize.option == O_SIZE) {
+ v->value = oi->size;
+ v->s = xstrfmt("%"PRIuMAX , (uintmax_t)oi->size);
+ }
} else if (!strcmp(name, "deltabase"))
v->s = xstrdup(oid_to_hex(&oi->delta_base_oid));
else if (deref)