From: Karthik Nayak <karthik.188@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, Matthieu.Moy@grenoble-inp.fr,
gitster@pobox.com, Karthik Nayak <Karthik.188@gmail.com>,
Karthik Nayak <karthik.188@gmail.com>
Subject: [PATCH v8 02/11] ref-filter: introduce ref_formatting_state
Date: Mon, 3 Aug 2015 22:24:12 +0530 [thread overview]
Message-ID: <1438620861-25219-2-git-send-email-Karthik.188@gmail.com> (raw)
In-Reply-To: <CAOLa=ZTYWTjc-OC7N7FGWETP1svpCkqhQ2wwPmbf5nVRyPRAqg@mail.gmail.com>
Introduce a ref_formatting_state which will eventually hold the values
of modifier atoms. Implement this within ref-filter.
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
---
ref-filter.c | 49 +++++++++++++++++++++++++++++++++++++------------
ref-filter.h | 4 ++++
2 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/ref-filter.c b/ref-filter.c
index febdc45..c4c7064 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1190,9 +1190,10 @@ void ref_array_sort(struct ref_sorting *sorting, struct ref_array *array)
qsort(array->items, array->nr, sizeof(struct ref_array_item *), compare_refs);
}
-static void print_value(struct atom_value *v, int quote_style, struct strbuf *output)
+static void print_value(struct atom_value *v, struct ref_formatting_state *state,
+ struct strbuf *output)
{
- switch (quote_style) {
+ switch (state->quote_style) {
case QUOTE_NONE:
strbuf_addstr(output, v->s);
break;
@@ -1249,24 +1250,47 @@ static void emit(const char *cp, const char *ep, struct strbuf *output)
}
}
+static void process_formatting_state(struct atom_value *atomv, struct ref_formatting_state *state)
+{
+ /* Based on the atomv values, the formatting state is set */
+}
+
+static void apply_formatting_state(struct ref_formatting_state *state, struct strbuf *value,
+ struct strbuf *format)
+{
+ /* More formatting options to be evetually added */
+ strbuf_addbuf(format, value);
+ strbuf_release(value);
+}
+
void show_ref_array_item(struct ref_array_item *info, const char *format, int quote_style)
{
const char *cp, *sp, *ep;
- struct strbuf output = STRBUF_INIT;
+ struct strbuf value = STRBUF_INIT;
+ struct strbuf final_buf = STRBUF_INIT;
+ struct ref_formatting_state state;
int i;
+ memset(&state, 0, sizeof(state));
+ state.quote_style = quote_style;
+
for (cp = format; *cp && (sp = find_next(cp)); cp = ep + 1) {
- struct atom_value *atomv;
+ struct atom_value *atomv = NULL;
ep = strchr(sp, ')');
- if (cp < sp)
- emit(cp, sp, &output);
+ if (cp < sp) {
+ emit(cp, sp, &value);
+ apply_formatting_state(&state, &value, &final_buf);
+ }
get_ref_atom_value(info, parse_ref_filter_atom(sp + 2, ep), &atomv);
- print_value(atomv, quote_style, &output);
+ process_formatting_state(atomv, &state);
+ print_value(atomv, &state, &value);
+ apply_formatting_state(&state, &value, &final_buf);
}
if (*cp) {
sp = cp + strlen(cp);
- emit(cp, sp, &output);
+ emit(cp, sp, &value);
+ apply_formatting_state(&state, &value, &final_buf);
}
if (need_color_reset_at_eol) {
struct atom_value resetv;
@@ -1275,12 +1299,13 @@ void show_ref_array_item(struct ref_array_item *info, const char *format, int qu
if (color_parse("reset", color) < 0)
die("BUG: couldn't parse 'reset' as a color");
resetv.s = color;
- print_value(&resetv, quote_style, &output);
+ print_value(&resetv, &state, &value);
+ apply_formatting_state(&state, &value, &final_buf);
}
- for (i = 0; i < output.len; i++)
- printf("%c", output.buf[i]);
+ for (i = 0; i < final_buf.len; i++)
+ printf("%c", final_buf.buf[i]);
putchar('\n');
- strbuf_release(&output);
+ strbuf_release(&final_buf);
}
/* If no sorting option is given, use refname to sort as default */
diff --git a/ref-filter.h b/ref-filter.h
index 6bf27d8..b64677f 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -16,6 +16,10 @@
#define FILTER_REFS_INCLUDE_BROKEN 0x1
#define FILTER_REFS_ALL 0x2
+struct ref_formatting_state {
+ int quote_style;
+};
+
struct atom_value {
const char *s;
unsigned long ul; /* used for sorting when not FIELD_STR */
--
2.4.6
next prev parent reply other threads:[~2015-08-03 16:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-03 16:52 [PATCH v8 0/11] Port tag.c over to use ref-filter APIs Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 01/11] ref-filter: print output to strbuf for formatting Karthik Nayak
2015-08-03 20:36 ` Junio C Hamano
2015-08-03 21:23 ` Karthik Nayak
2015-08-03 16:54 ` Karthik Nayak [this message]
2015-08-03 20:42 ` [PATCH v8 02/11] ref-filter: introduce ref_formatting_state Junio C Hamano
2015-08-03 22:03 ` Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 03/11] ref-filter: implement an `align` atom Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 04/11] ref-filter: add option to filter only tags Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 05/11] ref-filter: support printing N lines from tag annotation Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 06/11] ref-filter: add support to sort by version Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 07/11] ref-filter: add option to match literal pattern Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 08/11] tag.c: use 'ref-filter' data structures Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 09/11] tag.c: use 'ref-filter' APIs Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 10/11] tag.c: implement '--format' option Karthik Nayak
2015-08-03 16:54 ` [PATCH v8 11/11] tag.c: implement '--merged' and '--no-merged' options Karthik Nayak
2015-08-03 20:21 ` [PATCH v8 0/11] Port tag.c over to use ref-filter APIs Junio C Hamano
2015-08-03 21:22 ` Karthik Nayak
2015-08-03 22:08 ` Junio C Hamano
2015-08-03 22:13 ` Karthik Nayak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1438620861-25219-2-git-send-email-Karthik.188@gmail.com \
--to=karthik.188@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.