Create format_ref_array_item() out of show_ref_array_item(). This will
store the output format for the given ref_array_item into the provided
strbuf. Make show_ref_array_item() a wrapper around this to print the
given ref_array_item with linefeed.

Mentored-by: Christian Couder <[email protected]>
Mentored-by: Matthieu Moy <[email protected]>
Signed-off-by: Karthik Nayak <[email protected]>
---
 ref-filter.c | 59 +++++++++++++++++++++++++++++++++--------------------------
 ref-filter.h |  7 +++++--
 2 files changed, 38 insertions(+), 28 deletions(-)

diff --git a/ref-filter.c b/ref-filter.c
index 5d4f93d..1e6754a 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -153,6 +153,27 @@ int parse_ref_filter_atom(const char *atom, const char *ep)
        return at;
 }
 
+static void quote_formatting(struct strbuf *s, const char *str, int 
quote_style)
+{
+       switch (quote_style) {
+       case QUOTE_NONE:
+               strbuf_addstr(s, str);
+               break;
+       case QUOTE_SHELL:
+               sq_quote_buf(s, str);
+               break;
+       case QUOTE_PERL:
+               perl_quote_buf(s, str);
+               break;
+       case QUOTE_PYTHON:
+               python_quote_buf(s, str);
+               break;
+       case QUOTE_TCL:
+               tcl_quote_buf(s, str);
+               break;
+       }
+}
+
 static void push_stack_element(struct ref_formatting_stack **stack)
 {
        struct ref_formatting_stack *s = xcalloc(1, sizeof(struct 
ref_formatting_stack));
@@ -665,27 +686,6 @@ static void align_atom_handler(struct atom_value *atomv, 
struct ref_formatting_s
        new->cb_data = atomv->align;
 }
 
-static void quote_formatting(struct strbuf *s, const char *str, int 
quote_style)
-{
-       switch (quote_style) {
-       case QUOTE_NONE:
-               strbuf_addstr(s, str);
-               break;
-       case QUOTE_SHELL:
-               sq_quote_buf(s, str);
-               break;
-       case QUOTE_PERL:
-               perl_quote_buf(s, str);
-               break;
-       case QUOTE_PYTHON:
-               python_quote_buf(s, str);
-               break;
-       case QUOTE_TCL:
-               tcl_quote_buf(s, str);
-               break;
-       }
-}
-
 static void append_atom(struct atom_value *v, struct ref_formatting_state 
*state)
 {
        /*
@@ -1445,10 +1445,10 @@ static void append_literal(const char *cp, const char 
*ep, struct ref_formatting
        }
 }
 
-void show_ref_array_item(struct ref_array_item *info, const char *format, int 
quote_style)
+void format_ref_array_item(struct strbuf *out, struct ref_array_item *info,
+                          const char *format, int quote_style)
 {
        const char *cp, *sp, *ep;
-       struct strbuf *final_buf;
        struct ref_formatting_state state = REF_FORMATTING_STATE_INIT;
 
        state.quote_style = quote_style;
@@ -1478,10 +1478,17 @@ void show_ref_array_item(struct ref_array_item *info, 
const char *format, int qu
        }
        if (state.stack->prev)
                die(_("format: `end` atom missing"));
-       final_buf = &state.stack->output;
-       fwrite(final_buf->buf, 1, final_buf->len, stdout);
+       strbuf_addbuf(out, &state.stack->output);
        pop_stack_element(&state.stack);
-       putchar('\n');
+}
+
+void show_ref_array_item(struct ref_array_item *item, const char *format, 
unsigned int quote_style)
+{
+       struct strbuf out = STRBUF_INIT;
+       format_ref_array_item(&out, item, format, quote_style);
+       fwrite(out.buf, out.len, 1, stdout);
+       printf("\n");
+       strbuf_release(&out);
 }
 
 /*  If no sorting option is given, use refname to sort as default */
diff --git a/ref-filter.h b/ref-filter.h
index 0913ba9..082bee5 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -91,8 +91,11 @@ int parse_ref_filter_atom(const char *atom, const char *ep);
 int verify_ref_format(const char *format);
 /*  Sort the given ref_array as per the ref_sorting provided */
 void ref_array_sort(struct ref_sorting *sort, struct ref_array *array);
-/*  Print the ref using the given format and quote_style */
-void show_ref_array_item(struct ref_array_item *info, const char *format, int 
quote_style);
+/*  Format the ref as per given format and quote_style and store it into the 
strbuf */
+void format_ref_array_item(struct strbuf *out, struct ref_array_item *info,
+                          const char *format, int quote_style);
+/*  Wrapper around format_ref_array_item() which prints the given 
ref_array_item */
+void show_ref_array_item(struct ref_array_item *item, const char *format, 
unsigned int quote_style);
 /*  Callback function for parsing the sort option */
 int parse_opt_ref_sorting(const struct option *opt, const char *arg, int 
unset);
 /*  Default sort option based on refname */
-- 
2.5.0

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

Reply via email to