Split expand_atom() into 2 different functions,
mark_atom_in_object_info() prepares variable for further filling,
(new) expand_atom() creates resulting string.
Need that for further reusing of formatting logic from ref-filter.
Both functions will be step-by-step removed by the end of this patch.

Signed-off-by: Olga Telezhnaia <olyatelezhn...@gmail.com>
Mentored-by: Christian Couder <christian.cou...@gmail.com>
Mentored by: Jeff King <p...@peff.net>
---
 builtin/cat-file.c | 73 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 38 insertions(+), 35 deletions(-)

diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 37d6096d201b5..edb04a96d9bd3 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -182,47 +182,47 @@ static int is_atom(const char *atom, const char *s, int 
slen)
        return alen == slen && !memcmp(atom, s, alen);
 }
 
-static void expand_atom(struct strbuf *sb, const char *atom, int len,
-                       void *vdata)
+static void mark_atom_in_object_info(const char *atom, int len,
+                                    struct expand_data *data)
 {
-       struct expand_data *data = vdata;
+       if (is_atom("objectname", atom, len))
+               ; /* do nothing */
+       else if (is_atom("objecttype", atom, len))
+               data->info.typep = &data->type;
+       else if (is_atom("objectsize", atom, len))
+               data->info.sizep = &data->size;
+       else if (is_atom("objectsize:disk", atom, len))
+               data->info.disk_sizep = &data->disk_size;
+       else if (is_atom("rest", atom, len))
+               data->split_on_whitespace = 1;
+       else if (is_atom("deltabase", atom, len))
+               data->info.delta_base_sha1 = data->delta_base_oid.hash;
+       else
+               die("unknown format element: %.*s", len, atom);
+}
 
-       if (is_atom("objectname", atom, len)) {
-               if (!data->mark_query)
-                       strbuf_addstr(sb, oid_to_hex(&data->oid));
-       } else if (is_atom("objecttype", atom, len)) {
-               if (data->mark_query)
-                       data->info.typep = &data->type;
-               else
-                       strbuf_addstr(sb, typename(data->type));
-       } else if (is_atom("objectsize", atom, len)) {
-               if (data->mark_query)
-                       data->info.sizep = &data->size;
-               else
-                       strbuf_addf(sb, "%lu", data->size);
-       } else if (is_atom("objectsize:disk", atom, len)) {
-               if (data->mark_query)
-                       data->info.disk_sizep = &data->disk_size;
-               else
-                       strbuf_addf(sb, "%"PRIuMAX, (uintmax_t)data->disk_size);
-       } else if (is_atom("rest", atom, len)) {
-               if (data->mark_query)
-                       data->split_on_whitespace = 1;
-               else if (data->rest)
+static void expand_atom(struct strbuf *sb, const char *atom, int len,
+                        struct expand_data *data)
+{
+       if (is_atom("objectname", atom, len))
+               strbuf_addstr(sb, oid_to_hex(&data->oid));
+       else if (is_atom("objecttype", atom, len))
+               strbuf_addstr(sb, typename(data->type));
+       else if (is_atom("objectsize", atom, len))
+               strbuf_addf(sb, "%lu", data->size);
+       else if (is_atom("objectsize:disk", atom, len))
+               strbuf_addf(sb, "%"PRIuMAX, (uintmax_t)data->disk_size);
+       else if (is_atom("rest", atom, len)) {
+               if (data->rest)
                        strbuf_addstr(sb, data->rest);
-       } else if (is_atom("deltabase", atom, len)) {
-               if (data->mark_query)
-                       data->info.delta_base_sha1 = data->delta_base_oid.hash;
-               else
-                       strbuf_addstr(sb,
-                                     oid_to_hex(&data->delta_base_oid));
-       } else
-               die("unknown format element: %.*s", len, atom);
+       } else if (is_atom("deltabase", atom, len))
+               strbuf_addstr(sb, oid_to_hex(&data->delta_base_oid));
 }
 
-static size_t expand_format(struct strbuf *sb, const char *start, void *data)
+static size_t expand_format(struct strbuf *sb, const char *start, void *vdata)
 {
        const char *end;
+       struct expand_data *data = vdata;
 
        if (*start != '(')
                return 0;
@@ -230,7 +230,10 @@ static size_t expand_format(struct strbuf *sb, const char 
*start, void *data)
        if (!end)
                die("format element '%s' does not end in ')'", start);
 
-       expand_atom(sb, start + 1, end - start - 1, data);
+       if (data->mark_query)
+               mark_atom_in_object_info(start + 1, end - start - 1, data);
+       else
+               expand_atom(sb, start + 1, end - start - 1, data);
 
        return end - start + 1;
 }

--
https://github.com/git/git/pull/452

Reply via email to