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

[PATCH v2 18/18] ref-filter: make cat_file_info independent

From
Olga Telezhnaya <olyatelezhnaya@gmail.com>
Date
Jan 10, 2018, 09:36 UTC
Message-ID
<01020160df6dc5d5-9b4c7836-9762-4055-a8a4-0b65fa0de9de-000000@eu-west-1.amazonses.com>
In-Reply-To
<01020160df6dc499-0e6d11ec-1dcd-4a71-997b-ea231f33fae4-000000@eu-west-1.amazonses.com>

Remove connection between expand_data variable in cat-file and in ref-filter. It will help further to get rid of using expand_data in cat-file.

Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored by: Jeff King <peff@peff.net>
---
 builtin/cat-file.c |  2 +-
 ref-filter.c       | 28 ++++++++++++++--------------
 ref-filter.h       |  1 -
 3 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index 19cee0d22fabe..ffa8e61213e36 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -289,6 +289,7 @@ static void batch_object_write(const char *obj_name, struct batch_options *opt,
 	item.start_of_request = obj_name;
 
 	if (populate_value(&item)) return;
+	data->type = item.type;
 
 	strbuf_expand(&buf, opt->format->format, expand_format, &item);
 	strbuf_addch(&buf, '\n');
@@ -392,7 +393,6 @@ static int batch_objects(struct batch_options *opt)
 	 * object.
 	 */
 	memset(&data, 0, sizeof(data));
-	opt->format->cat_file_data = &data;
 	opt->format->is_cat = 1;
 	opt->format->split_on_whitespace = &data.split_on_whitespace;
 	opt->format->all_objects = opt->all_objects;
diff --git a/ref-filter.c b/ref-filter.c
index 83bacdd8bdd78..aee6be32f53ef 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -100,7 +100,7 @@ static struct used_atom {
 	} u;
 } *used_atom;
 static int used_atom_cnt, need_tagged, need_symref;
-struct expand_data *cat_file_info;
+struct expand_data cat_file_info;
 static int is_cat = 0;
 
 static void color_atom_parser(const struct ref_format *format, struct used_atom *atom, const char *color_value)
@@ -256,9 +256,9 @@ 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)
-		cat_file_info->info.sizep = &cat_file_info->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;
+		cat_file_info.info.disk_sizep = &cat_file_info.disk_size;
 	else
 		die(_("urecognized %%(objectsize) argument: %s"), arg);
 }
@@ -266,7 +266,7 @@ static void objectsize_atom_parser(const struct ref_format *format, struct used_
 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;
+		cat_file_info.info.typep = &cat_file_info.type;
 	else
 		die(_("urecognized %%(objecttype) argument: %s"), arg);
 }
@@ -274,7 +274,7 @@ static void objecttype_atom_parser(const struct ref_format *format, struct used_
 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;
+		cat_file_info.info.delta_base_sha1 = cat_file_info.delta_base_oid.hash;
 	else
 		die(_("urecognized %%(deltabase) argument: %s"), arg);
 }
@@ -739,7 +739,6 @@ int verify_ref_format(struct ref_format *format)
 {
 	const char *cp, *sp;
 
-	cat_file_info = format->cat_file_data;
 	is_cat = format->is_cat;
 	format->need_color_reset_at_eol = 0;
 	for (cp = format->format; *cp && (sp = find_next(cp)); ) {
@@ -766,8 +765,8 @@ int verify_ref_format(struct ref_format *format)
 		format->need_color_reset_at_eol = 0;
 	if (is_cat && format->all_objects) {
 		struct object_info empty = OBJECT_INFO_INIT;
-		if (!memcmp(&cat_file_info->info, &empty, sizeof(empty)))
-			cat_file_info->skip_object_info = 1;
+		if (!memcmp(&cat_file_info.info, &empty, sizeof(empty)))
+			cat_file_info.skip_object_info = 1;
 	}
 	return 0;
 }
@@ -1472,18 +1471,19 @@ int populate_value(struct ref_array_item *ref)
 	}
 
 	if (is_cat) {
-		if (!cat_file_info->skip_object_info &&
-		    sha1_object_info_extended(ref->objectname.hash, &cat_file_info->info,
+		if (!cat_file_info.info.typep) cat_file_info.info.typep = &cat_file_info.type;
+		if (!cat_file_info.skip_object_info &&
+		    sha1_object_info_extended(ref->objectname.hash, &cat_file_info.info,
 					      OBJECT_INFO_LOOKUP_REPLACE) < 0) {
 			const char *e = ref->start_of_request;
 			printf("%s missing\n", e ? e : oid_to_hex(&ref->objectname));
 			fflush(stdout);
 			return -1;
 		}
-		ref->type = cat_file_info->type;
-		ref->size = cat_file_info->size;
-		ref->disk_size = cat_file_info->disk_size;
-		ref->delta_base_oid = cat_file_info->delta_base_oid;
+		ref->type = cat_file_info.type;
+		ref->size = cat_file_info.size;
+		ref->disk_size = cat_file_info.disk_size;
+		ref->delta_base_oid = cat_file_info.delta_base_oid;
 	}
 
 	/* Fill in specials first */
diff --git a/ref-filter.h b/ref-filter.h
index e588d1f50eef6..d3e0cbdd4ce6d 100644
--- a/ref-filter.h
+++ b/ref-filter.h
@@ -125,7 +125,6 @@ struct ref_format {
 	 * Helps to move all formatting logic from cat-file to ref-filter,
 	 * hopefully would be reduced later.
 	 */
-	struct expand_data *cat_file_data;
 	int is_cat;
 	int *split_on_whitespace;
 	int all_objects;

--
https://github.com/git/git/pull/450
Previous: Olga TelezhnayaNext: Olga Telezhnaya
Message 6 of 47 in “cat-file: split expand_atom into 2 functions”
  1. 01/18 cat-file: split expand_atom into 2 functionsOlga Telezhnaya, Jan 10, 2018
  2. 14/18 ref-filter: get rid of expand_atom_into_fieldsOlga Telezhnaya, Jan 10, 2018
  3. 15/18 ref-filter: add is_cat flagOlga Telezhnaya, Jan 10, 2018
  4. 16/18 ref_format: add split_on_whitespace flagOlga Telezhnaya, Jan 10, 2018
  5. 08/18 ref-filter: get rid of gotoOlga Telezhnaya, Jan 10, 2018
  6. 18/18 ref-filter: make cat_file_info independentOlga Telezhnaya, Jan 10, 2018
  7. 02/18 cat-file: reuse struct ref_formatOlga Telezhnaya, Jan 10, 2018
  8. Jeff KingJan 15, 2018
  9. Оля ТележнаяJan 16, 2018
  10. 07/18 cat-file: remove unused codeOlga Telezhnaya, Jan 10, 2018
  11. 10/18 cat-file: get rid of duplicate checkingOlga Telezhnaya, Jan 10, 2018
  12. 17/18 cat-file: move skip_object_info into ref-filterOlga Telezhnaya, Jan 10, 2018
  13. 05/18 cat-file: start migrating to ref-filterOlga Telezhnaya, Jan 10, 2018
  14. 09/18 cat-file: simplify expand_atom functionOlga Telezhnaya, Jan 10, 2018
  15. 13/18 cat-file: start reusing populate_valueOlga Telezhnaya, Jan 10, 2018
  16. 11/18 cat-file: start use ref_array_item structOlga Telezhnaya, Jan 10, 2018
  17. 06/18 ref-filter: reuse parse_ref_filter_atomOlga Telezhnaya, Jan 10, 2018
  18. 12/18 ref-filter: make populate_value globalOlga Telezhnaya, Jan 10, 2018
  19. 04/18 cat-file: move struct expand_data into ref-filterOlga Telezhnaya, Jan 10, 2018
  20. Jeff KingJan 15, 2018
  21. Оля ТележнаяJan 16, 2018
  22. Jeff KingJan 17, 2018
  23. Оля ТележнаяJan 18, 2018
  24. 03/18 ref-filter: make valid_atom as function parameterOlga Telezhnaya, Jan 10, 2018
  25. Jeff KingJan 15, 2018
  26. Оля ТележнаяJan 16, 2018
  27. Jeff KingJan 17, 2018
  28. Christian CouderJan 17, 2018
  29. Оля ТележнаяJan 18, 2018
  30. Оля ТележнаяJan 18, 2018
  31. Christian CouderJan 18, 2018
  32. Оля ТележнаяJan 19, 2018
  33. Christian CouderJan 19, 2018
  34. Christian CouderJan 19, 2018
  35. Оля ТележнаяJan 19, 2018
  36. Christian CouderJan 19, 2018
  37. Jeff KingJan 19, 2018
  38. Christian CouderJan 19, 2018
  39. Junio C HamanoJan 19, 2018
  40. Jeff KingJan 19, 2018
  41. Jeff KingJan 15, 2018
  42. Jeff KingJan 15, 2018
  43. Оля ТележнаяJan 16, 2018
  44. Jeff KingJan 17, 2018
  45. Christian CouderJan 17, 2018
  46. Оля ТележнаяJan 18, 2018
  47. Christian CouderJan 18, 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.