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

[PATCH 20/20] cat-file: make cat_file_info variable independent

From
Olga Telezhnaya <olyatelezhnaya@gmail.com>
Date
Jan 9, 2018, 13:05 UTC
Message-ID
<01020160db067ca1-d14d3b76-31fe-44cc-a655-7a548a0fe17d-000000@eu-west-1.amazonses.com>
In-Reply-To
<01020160db0679c9-799a0bc4-b6d1-43e2-ad3b-80be4e4c55e9-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 dbca6856432c0..a8a93b488db37 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -100,7 +100,7 @@ static struct used_atom {
 	} u;
 } *used_atoms;
 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)); ) {
@@ -768,8 +767,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;
 }
@@ -1474,18 +1473,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 7f7b17e659241..ebaed0412fac2 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 8 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.