summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2010-02-13 12:05:44 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2010-02-13 12:25:28 -0800
commit88fb7f27f6036028b3470e0e2a0efed1d9c7ee78 (patch)
tree2125996b8f585c5a9439158aa5aad69f54e5aa18
parentfor-each-ref --format='%(symref) %(symref:short)' (diff)
downloadtgif-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.c22
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;