diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-02-13 12:05:44 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-02-13 12:25:28 -0800 |
commit | 88fb7f27f6036028b3470e0e2a0efed1d9c7ee78 (patch) | |
tree | 2125996b8f585c5a9439158aa5aad69f54e5aa18 | |
parent | for-each-ref --format='%(symref) %(symref:short)' (diff) | |
download | tgif-88fb7f27f6036028b3470e0e2a0efed1d9c7ee78.tar.xz |
for-each-ref --format='%(flag)'
This expands to "symref" or "packed" or an empty string, exposing the
internal "flag" the for_each_ref() callback functions are called with.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | builtin-for-each-ref.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/builtin-for-each-ref.c b/builtin-for-each-ref.c index b9b03e14d3..62be1bbfd6 100644 --- a/builtin-for-each-ref.c +++ b/builtin-for-each-ref.c @@ -71,6 +71,7 @@ static struct { { "contents" }, { "upstream" }, { "symref" }, + { "flag" }, }; /* @@ -558,6 +559,13 @@ static void grab_values(struct atom_value *val, int deref, struct object *obj, v } } +static inline char *copy_advance(char *dst, const char *src) +{ + while (*src) + *dst++ = *src++; + return dst; +} + /* * Parse the object referred by ref, and grab needed value. */ @@ -610,6 +618,20 @@ static void populate_value(struct refinfo *ref) continue; refname = branch->merge[0]->dst; } + else if (!strcmp(name, "flag")) { + char buf[256], *cp = buf; + if (ref->flag & REF_ISSYMREF) + cp = copy_advance(cp, ",symref"); + if (ref->flag & REF_ISPACKED) + cp = copy_advance(cp, ",packed"); + if (cp == buf) + v->s = ""; + else { + *cp = '\0'; + v->s = xstrdup(buf + 1); + } + continue; + } else continue; |