By the time show_ref() is called, atom values for all refs are
ready. This can be taken advantage of later.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 builtin/for-each-ref.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c
index db5c211..a9d189c 100644
--- a/builtin/for-each-ref.c
+++ b/builtin/for-each-ref.c
@@ -1010,15 +1010,24 @@ static void show_ref(struct strbuf *sb, struct refinfo 
*info,
 static void show_refs(struct refinfo **refs, int maxcount,
                      const char *format, int quote_style)
 {
-       struct strbuf sb = STRBUF_INIT;
+       struct strbuf *sb;
        int i;
 
+       sb = xmalloc(sizeof(*sb) * maxcount);
        for (i = 0; i < maxcount; i++) {
-               strbuf_reset(&sb);
-               show_ref(&sb, refs[i], format, quote_style);
-               fputs(sb.buf, stdout);
+               strbuf_init(sb + i, 256);
+               if (!refs[i]->value) {
+                       populate_value(refs[i]);
+                       fill_missing_values(refs[i]->value);
+               }
+       }
+
+       for (i = 0; i < maxcount; i++) {
+               show_ref(sb + i, refs[i], format, quote_style);
+               fputs(sb[i].buf, stdout);
+               strbuf_release(sb + i);
        }
-       strbuf_release(&sb);
+       free(sb);
 }
 
 static struct ref_sort *default_sort(void)
-- 
1.8.2.83.gc99314b

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to