[PATCH 2/5] for-each-ref: refactor refname handling
- From
Jeff King <peff@peff.net>
- Date
- Apr 7, 2009, 07:06 UTC
- Message-ID
- <20090407070651.GB2924@coredump.intra.peff.net>
- In-Reply-To
- <20090407070254.GA2870@coredump.intra.peff.net>
This code handles some special magic like *-deref and the :short formatting specifier. The next patch will add another field which outputs a ref and wants to use the same code.
This patch splits the "which ref are we outputting" from the actual formatting. There should be no behavioral change.
Signed-off-by: Jeff King <peff@peff.net> --- The diff is scary, but it is mostly reindentation.
builtin-for-each-ref.c | 47 ++++++++++++++++++++++++++--------------------- 1 files changed, 26 insertions(+), 21 deletions(-)
diff --git a/builtin-for-each-ref.c b/builtin-for-each-ref.c index 4aaf75c..b50c93b 100644 --- a/builtin-for-each-ref.c +++ b/builtin-for-each-ref.c @@ -672,32 +672,37 @@ static void populate_value(struct refinfo *ref) const char *name = used_atom[i]; struct atom_value *v = &ref->value[i]; int deref = 0; + const char *refname; + const char *formatp; + if (*name == '*') { deref = 1; name++; } - if (!prefixcmp(name, "refname")) { - const char *formatp = strchr(name, ':'); - const char *refname = ref->refname; - - /* look for "short" refname format */ - if (formatp) { - formatp++; - if (!strcmp(formatp, "short")) - refname = get_short_ref(ref->refname); - else - die("unknown refname format %s", - formatp); - } - if (!deref) - v->s = refname; - else { - int len = strlen(refname); - char *s = xmalloc(len + 4); - sprintf(s, "%s^{}", refname); - v->s = s; - } + if (!prefixcmp(name, "refname")) + refname = ref->refname; + else + continue; + + formatp = strchr(name, ':'); + /* look for "short" refname format */ + if (formatp) { + formatp++; + if (!strcmp(formatp, "short")) + refname = get_short_ref(refname); + else + die("unknown %.*s format %s", + formatp - name, name, formatp); + } + + if (!deref) + v->s = refname; + else { + int len = strlen(refname); + char *s = xmalloc(len + 4); + sprintf(s, "%s^{}", refname); + v->s = s; } }
-- 1.6.2.2.450.gd6aa9.dirty