diff options
Diffstat (limited to 'builtin/for-each-ref.c')
| -rw-r--r-- | builtin/for-each-ref.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 5ff51d1d32..875bd813d5 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -217,6 +217,22 @@ static void *get_obj(const unsigned char *sha1, struct object **obj, unsigned lo return buf; } +static int grab_objectname(const char *name, const unsigned char *sha1, + struct atom_value *v) +{ + if (!strcmp(name, "objectname")) { + char *s = xmalloc(41); + strcpy(s, sha1_to_hex(sha1)); + v->s = s; + return 1; + } + if (!strcmp(name, "objectname:short")) { + v->s = xstrdup(find_unique_abbrev(sha1, DEFAULT_ABBREV)); + return 1; + } + return 0; +} + /* See grab_values */ static void grab_common_values(struct atom_value *val, int deref, struct object *obj, void *buf, unsigned long sz) { @@ -237,15 +253,8 @@ static void grab_common_values(struct atom_value *val, int deref, struct object v->ul = sz; v->s = s; } - else if (!strcmp(name, "objectname")) { - char *s = xmalloc(41); - strcpy(s, sha1_to_hex(obj->sha1)); - v->s = s; - } - else if (!strcmp(name, "objectname:short")) { - v->s = xstrdup(find_unique_abbrev(obj->sha1, - DEFAULT_ABBREV)); - } + else if (deref) + grab_objectname(name, obj->sha1, v); } } @@ -692,6 +701,8 @@ static void populate_value(struct refinfo *ref) v->s = xstrdup(buf + 1); } continue; + } else if (!deref && grab_objectname(name, ref->objectname, v)) { + continue; } else if (!strcmp(name, "HEAD")) { const char *head; unsigned char sha1[20]; |
