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 <christian.couder@xxxxxxxxx> Mentored-by: Matthieu Moy <matthieu.moy@xxxxxxxxxxxxxxx> Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html