git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 06/12] ref-filter: introduce color_atom_parser()

From
Karthik Nayak <karthik.188@gmail.com>
Date
Feb 16, 2016, 19:00 UTC
Message-ID
<1455649215-23260-7-git-send-email-Karthik.188@gmail.com>
In-Reply-To
<1455649215-23260-1-git-send-email-Karthik.188@gmail.com>

Introduce color_atom_parser() which will parse a "color" atom and store its color in the "used_atom" structure for further usage in populate_value().

Helped-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
---
 ref-filter.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/ref-filter.c b/ref-filter.c
index 974c412..f401da6 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -29,10 +29,21 @@ typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
 static struct used_atom {
 	const char *name;
 	cmp_type type;
+	union {
+		char color[COLOR_MAXLEN];
+	} u;
 } *used_atom;
 static int used_atom_cnt, need_tagged, need_symref;
 static int need_color_reset_at_eol;
 
+static void color_atom_parser(struct used_atom *atom, const char *color_value)
+{
+	if (!color_value)
+		die(_("expected format: %%(color:<color>)"));
+	if (color_parse(color_value, atom->u.color) < 0)
+		die(_("unrecognized color: %%(color:%s)"), color_value);
+}
+
 static struct {
 	const char *name;
 	cmp_type cmp_type;
@@ -70,7 +81,7 @@ static struct {
 	{ "symref" },
 	{ "flag" },
 	{ "HEAD" },
-	{ "color" },
+	{ "color", FIELD_STR, color_atom_parser },
 	{ "align" },
 	{ "end" },
 };
@@ -158,6 +169,7 @@ int parse_ref_filter_atom(const char *atom, const char *ep)
 	used_atom[at].type = valid_atom[i].cmp_type;
 	if (arg)
 		arg = used_atom[at].name + (arg - atom) + 1;
+	memset(&used_atom[at].u, 0, sizeof(used_atom[at].u));
 	if (valid_atom[i].parser)
 		valid_atom[i].parser(&used_atom[at], arg);
 	if (*atom == '*')
@@ -816,6 +828,7 @@ static void populate_value(struct ref_array_item *ref)
 
 	/* Fill in specials first */
 	for (i = 0; i < used_atom_cnt; i++) {
+		struct used_atom *atom = &used_atom[i];
 		const char *name = used_atom[i].name;
 		struct atom_value *v = &ref->value[i];
 		int deref = 0;
@@ -856,14 +869,8 @@ static void populate_value(struct ref_array_item *ref)
 			refname = branch_get_push(branch, NULL);
 			if (!refname)
 				continue;
-		} else if (match_atom_name(name, "color", &valp)) {
-			char color[COLOR_MAXLEN] = "";
-
-			if (!valp)
-				die(_("expected format: %%(color:<color>)"));
-			if (color_parse(valp, color) < 0)
-				die(_("unable to parse format"));
-			v->s = xstrdup(color);
+		} else if (starts_with(name, "color:")) {
+			v->s = atom->u.color;
 			continue;
 		} else if (!strcmp(name, "flag")) {
 			char buf[256], *cp = buf;
-- 
2.7.1
Previous: Karthik NayakNext: Karthik Nayak
Message 26 of 32 in “ref-filter: use parsing functions”
  1. 00/12 ref-filter: use parsing functionsKarthik Nayak, Feb 16, 2016
  2. 01/12 strbuf: introduce strbuf_split_str_omit_term()Karthik Nayak, Feb 16, 2016
  3. 02/12 ref-filter: use strbuf_split_str_omit_term()Karthik Nayak, Feb 16, 2016
  4. Jeff KingFeb 16, 2016
  5. Jeff KingFeb 16, 2016
  6. Eric SunshineFeb 16, 2016
  7. Jeff KingFeb 16, 2016
  8. Eric SunshineFeb 16, 2016
  9. Jeff KingFeb 16, 2016
  10. Eric SunshineFeb 16, 2016
  11. Jeff KingFeb 16, 2016
  12. Junio C HamanoFeb 17, 2016
  13. Jeff KingFeb 17, 2016
  14. Junio C HamanoFeb 17, 2016
  15. Jeff KingFeb 17, 2016
  16. Junio C HamanoFeb 17, 2016
  17. Karthik NayakFeb 17, 2016
  18. Eric SunshineFeb 17, 2016
  19. Karthik NayakFeb 17, 2016
  20. Eric SunshineFeb 17, 2016
  21. Karthik NayakFeb 17, 2016
  22. Karthik NayakFeb 17, 2016
  23. 03/12 ref-filter: bump 'used_atom' and related code to the topKarthik Nayak, Feb 16, 2016
  24. 04/12 ref-filter: introduce struct used_atomKarthik Nayak, Feb 16, 2016
  25. 05/12 ref-filter: introduce parsing functions for each valid atomKarthik Nayak, Feb 16, 2016
  26. 06/12 ref-filter: introduce color_atom_parser()Karthik Nayak, Feb 16, 2016
  27. 07/12 ref-filter: introduce parse_align_position()Karthik Nayak, Feb 16, 2016
  28. 08/12 ref-filter: introduce align_atom_parser()Karthik Nayak, Feb 16, 2016
  29. 09/12 ref-filter: align: introduce long-form syntaxKarthik Nayak, Feb 16, 2016
  30. 10/12 ref-filter: introduce remote_ref_atom_parser()Karthik Nayak, Feb 16, 2016
  31. 11/12 ref-filter: introduce contents_atom_parser()Karthik Nayak, Feb 16, 2016
  32. 12/12 ref-filter: introduce objectname_atom_parser()Karthik Nayak, Feb 16, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.