From: Junio C Hamano Date: Mon, 29 May 2017 03:34:50 +0000 (+0900) Subject: Merge branch 'kn/ref-filter-branch-list' X-Git-Tag: v2.14.0-rc0~155 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8d3abeada9e1be49be75115f49f2af76506c0746;p=git Merge branch 'kn/ref-filter-branch-list' "git for-each-ref --format=..." with %(HEAD) in the format used to resolve the HEAD symref as many times as it had processed refs, which was wasteful, and "git branch" shared the same problem. * kn/ref-filter-branch-list: ref-filter: resolve HEAD when parsing %(HEAD) atom --- 8d3abeada9e1be49be75115f49f2af76506c0746 diff --cc ref-filter.c index 6cc93dcd9f,f4c6823727..3742abbf85 --- a/ref-filter.c +++ b/ref-filter.c @@@ -287,6 -287,12 +288,12 @@@ static void if_atom_parser(struct used_ } } + static void head_atom_parser(struct used_atom *atom, const char *arg) + { - unsigned char unused[GIT_SHA1_RAWSZ]; ++ struct object_id unused; + - atom->u.head = resolve_refdup("HEAD", RESOLVE_REF_READING, unused, NULL); ++ atom->u.head = resolve_refdup("HEAD", RESOLVE_REF_READING, unused.hash, NULL); + } static struct { const char *name; @@@ -1366,15 -1370,10 +1373,10 @@@ static void populate_value(struct ref_a v->s = xstrdup(buf + 1); } continue; - } else if (!deref && grab_objectname(name, ref->objectname, v, atom)) { + } else if (!deref && grab_objectname(name, ref->objectname.hash, v, atom)) { continue; } else if (!strcmp(name, "HEAD")) { - const char *head; - struct object_id oid; - - head = resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, - oid.hash, NULL); - if (head && !strcmp(ref->refname, head)) + if (atom->u.head && !strcmp(ref->refname, atom->u.head)) v->s = "*"; else v->s = " ";