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

[PATCH 16/20] cat-file: get rid of expand_atom_into_fields

From
Olga Telezhnaya <olyatelezhnaya@gmail.com>
Date
Jan 9, 2018, 13:05 UTC
Message-ID
<01020160db067c7c-74dd1ef6-598b-4010-bc2c-4315fd3125ee-000000@eu-west-1.amazonses.com>
In-Reply-To
<01020160db0679c9-799a0bc4-b6d1-43e2-ad3b-80be4e4c55e9-000000@eu-west-1.amazonses.com>

Remove expand_atom_into_fields function and create same logic in terms of ref-filter style.

Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored by: Jeff King <peff@peff.net>
---
 ref-filter.c | 45 +++++++++++++++++++++------------------------
 1 file changed, 21 insertions(+), 24 deletions(-)
diff --git a/ref-filter.c b/ref-filter.c
index 7df6d7e3d6511..112336edbe871 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -255,13 +255,29 @@ static void objectname_atom_parser(const struct ref_format *format, struct used_
 static void objectsize_atom_parser(const struct ref_format *format, struct used_atom *atom, const char *arg)
 {
 	if (!arg)
-		; /* default to normal object size */
+		cat_file_info->info.sizep = &cat_file_info->size;
 	else if (!strcmp(arg, "disk"))
 		cat_file_info->info.disk_sizep = &cat_file_info->disk_size;
 	else
 		die(_("urecognized %%(objectsize) argument: %s"), arg);
 }
 
+static void objecttype_atom_parser(const struct ref_format *format, struct used_atom *atom, const char *arg)
+{
+	if (!arg)
+		cat_file_info->info.typep = &cat_file_info->type;
+	else
+		die(_("urecognized %%(objecttype) argument: %s"), arg);
+}
+
+static void deltabase_atom_parser(const struct ref_format *format, struct used_atom *atom, const char *arg)
+{
+	if (!arg)
+		cat_file_info->info.delta_base_sha1 = cat_file_info->delta_base_oid.hash;
+	else
+		die(_("urecognized %%(deltabase) argument: %s"), arg);
+}
+
 static void refname_atom_parser(const struct ref_format *format, struct used_atom *atom, const char *arg)
 {
 	refname_atom_parser_internal(&atom->u.refname, arg, atom->name);
@@ -384,10 +400,10 @@ static struct valid_atom {
 
 static struct valid_atom valid_cat_file_atoms[] = {
 	{ "objectname" },
-	{ "objecttype" },
+	{ "objecttype", FIELD_STR, objecttype_atom_parser },
 	{ "objectsize", FIELD_ULONG, objectsize_atom_parser },
 	{ "rest" },
-	{ "deltabase" },
+	{ "deltabase", FIELD_STR, deltabase_atom_parser },
 };
 
 #define REF_FORMATTING_STATE_INIT  { 0, NULL }
@@ -411,25 +427,6 @@ struct atom_value {
 	struct used_atom *atom;
 };
 
-static int is_atom(const char *atom, const char *s, int slen)
-{
-	int alen = strlen(atom);
-	return alen == slen && !memcmp(atom, s, alen);
-}
-
-static void expand_atom_into_fields(const char *atom, int len,
-				    struct expand_data *data)
-{
-	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("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;
-}
-
 /*
  * Used to parse format string and sort specifiers
  */
@@ -496,8 +493,8 @@ static int parse_ref_filter_atom(const struct ref_format *format,
 		need_tagged = 1;
 	if (!strcmp(valid_atoms[i].name, "symref"))
 		need_symref = 1;
-	if (cat_file_info)
-		expand_atom_into_fields(atom, atom_len, cat_file_info);
+	if (cat_file_info && !strcmp(valid_atoms[i].name, "rest"))
+		cat_file_info->split_on_whitespace = 1;
 	return at;
 }
 

--
https://github.com/git/git/pull/450
Previous: Olga TelezhnayaNext: Olga Telezhnaya
Message 19 of 24 in “cat-file: split expand_atom into 2 functions”
  1. 01/20 cat-file: split expand_atom into 2 functionsOlga Telezhnaya, Jan 9, 2018
  2. 11/20 cat-file: get rid of duplicate checkingOlga Telezhnaya, Jan 9, 2018
  3. 10/20 cat-file: simplify expand_atom functionOlga Telezhnaya, Jan 9, 2018
  4. 09/20 cat-file: get rid of goto in ref-filterOlga Telezhnaya, Jan 9, 2018
  5. 15/20 cat-file: start reusing populate_valueOlga Telezhnaya, Jan 9, 2018
  6. 19/20 cat-file: move skip_object_info into ref-filterOlga Telezhnaya, Jan 9, 2018
  7. 14/20 cat-file: make populate_value globalOlga Telezhnaya, Jan 9, 2018
  8. 20/20 cat-file: make cat_file_info variable independentOlga Telezhnaya, Jan 9, 2018
  9. 04/20 cat-file: make valid_atoms as a function parameterOlga Telezhnaya, Jan 9, 2018
  10. Junio C HamanoJan 9, 2018
  11. 07/20 cat-file: reuse parse_ref_filter_atomOlga Telezhnaya, Jan 9, 2018
  12. Junio C HamanoJan 9, 2018
  13. 12/20 cat-file: rename variable in ref-filterOlga Telezhnaya, Jan 9, 2018
  14. 06/20 cat-file: start migrating to ref-filterOlga Telezhnaya, Jan 9, 2018
  15. 02/20 cat-file: reuse struct ref_formatOlga Telezhnaya, Jan 9, 2018
  16. 18/20 cat-file: add split_on_whitespace flagOlga Telezhnaya, Jan 9, 2018
  17. 13/20 cat-file: start use ref_array_item structOlga Telezhnaya, Jan 9, 2018
  18. 17/20 cat-file: add is_cat flag in ref-filterOlga Telezhnaya, Jan 9, 2018
  19. 16/20 cat-file: get rid of expand_atom_into_fieldsOlga Telezhnaya, Jan 9, 2018
  20. 03/20 cat-file: rename variables in ref-filterOlga Telezhnaya, Jan 9, 2018
  21. Junio C HamanoJan 9, 2018
  22. Оля ТележнаяJan 10, 2018
  23. 08/20 cat-file: remove unused codeOlga Telezhnaya, Jan 9, 2018
  24. 05/20 cat-file: move struct expand_data into ref-filterOlga Telezhnaya, Jan 9, 2018

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.