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

[PATCH 3/4] config: add options parameter to git_config_from_mem

From
Jeff King <peff@peff.net>
Date
Jun 28, 2018, 22:05 UTC
Message-ID
<20180628220523.GC5524@sigill.intra.peff.net>
In-Reply-To
<20180628220332.GA5128@sigill.intra.peff.net>

The underlying config parser knows how to handle a config_options struct, but git_config_from_mem() always passes NULL. Let's allow our callers to specify the options struct.

We could add a "_with_options" variant, but since there are only a handful of callers, let's just update them to pass NULL.

Signed-off-by: Jeff King <peff@peff.net>
---
 config.c           | 11 +++++++----
 config.h           |  7 +++++--
 fsck.c             |  2 +-
 submodule-config.c |  2 +-
 4 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/config.c b/config.c
index 0797e284f4..4548edb1e5 100644
--- a/config.c
+++ b/config.c
@@ -1569,8 +1569,10 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)
 	return git_config_from_file_with_options(fn, filename, data, NULL);
 }
 
-int git_config_from_mem(config_fn_t fn, const enum config_origin_type origin_type,
-			const char *name, const char *buf, size_t len, void *data)
+int git_config_from_mem(config_fn_t fn,
+			const enum config_origin_type origin_type,
+			const char *name, const char *buf, size_t len,
+			void *data, const struct config_options *opts)
 {
 	struct config_source top;
 
@@ -1585,7 +1587,7 @@ int git_config_from_mem(config_fn_t fn, const enum config_origin_type origin_typ
 	top.do_ungetc = config_buf_ungetc;
 	top.do_ftell = config_buf_ftell;
 
-	return do_config_from(&top, fn, data, NULL);
+	return do_config_from(&top, fn, data, opts);
 }
 
 int git_config_from_blob_oid(config_fn_t fn,
@@ -1606,7 +1608,8 @@ int git_config_from_blob_oid(config_fn_t fn,
 		return error("reference '%s' does not point to a blob", name);
 	}
 
-	ret = git_config_from_mem(fn, CONFIG_ORIGIN_BLOB, name, buf, size, data);
+	ret = git_config_from_mem(fn, CONFIG_ORIGIN_BLOB, name, buf, size,
+				  data, NULL);
 	free(buf);
 
 	return ret;
diff --git a/config.h b/config.h
index c02809ffdc..f2063ceb86 100644
--- a/config.h
+++ b/config.h
@@ -68,8 +68,11 @@ extern int git_config_from_file(config_fn_t fn, const char *, void *);
 extern int git_config_from_file_with_options(config_fn_t fn, const char *,
 					     void *,
 					     const struct config_options *);
-extern int git_config_from_mem(config_fn_t fn, const enum config_origin_type,
-					const char *name, const char *buf, size_t len, void *data);
+extern int git_config_from_mem(config_fn_t fn,
+			       const enum config_origin_type,
+			       const char *name,
+			       const char *buf, size_t len,
+			       void *data, const struct config_options *opts);
 extern int git_config_from_blob_oid(config_fn_t fn, const char *name,
 				    const struct object_id *oid, void *data);
 extern void git_config_push_parameter(const char *text);
diff --git a/fsck.c b/fsck.c
index 0b8b20b6c4..aa7a52cc80 100644
--- a/fsck.c
+++ b/fsck.c
@@ -1012,7 +1012,7 @@ static int fsck_blob(struct blob *blob, const char *buf,
 	data.options = options;
 	data.ret = 0;
 	if (git_config_from_mem(fsck_gitmodules_fn, CONFIG_ORIGIN_BLOB,
-				".gitmodules", buf, size, &data))
+				".gitmodules", buf, size, &data, NULL))
 		data.ret |= report(options, &blob->object,
 				   FSCK_MSG_GITMODULES_PARSE,
 				   "could not parse gitmodules blob");
diff --git a/submodule-config.c b/submodule-config.c
index 388ef1f892..2ca3272dd1 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -561,7 +561,7 @@ static const struct submodule *config_from(struct submodule_cache *cache,
 	parameter.gitmodules_oid = &oid;
 	parameter.overwrite = 0;
 	git_config_from_mem(parse_config, CONFIG_ORIGIN_SUBMODULE_BLOB, rev.buf,
-			config, config_size, &parameter);
+			config, config_size, &parameter, NULL);
 	strbuf_release(&rev);
 	free(config);
 
-- 
2.18.0.604.g8c4f59c959
Previous: Jeff KingNext: Jeff King
Message 12 of 31 in “fsck: check skiplist for object in fsck_blob()”
  1. fsck: check skiplist for object in fsck_blob()Ramsay Jones, Jun 27, 2018
  2. Jeff KingJun 28, 2018
  3. Junio C HamanoJun 28, 2018
  4. Jeff KingJun 28, 2018
  5. Ramsay JonesJun 28, 2018
  6. Junio C HamanoJun 28, 2018
  7. Jeff KingJun 28, 2018
  8. Ramsay JonesJun 28, 2018
  9. Jeff KingJun 28, 2018
  10. 1/4 config: turn die_on_error into caller-facing enumJeff King, Jun 28, 2018
  11. 2/4 config: add CONFIG_ERROR_SILENT handlerJeff King, Jun 28, 2018
  12. 3/4 config: add options parameter to git_config_from_memJeff King, Jun 28, 2018
  13. 4/4 fsck: silence stderr when parsing .gitmodulesJeff King, Jun 28, 2018
  14. Jeff KingJun 28, 2018
  15. Ramsay JonesJun 29, 2018
  16. Ramsay JonesJun 29, 2018
  17. Jeff KingJul 3, 2018
  18. Ramsay JonesJul 4, 2018
  19. Jeff KingJul 7, 2018
  20. Ramsay JonesJul 11, 2018
  21. Ramsay JonesJul 13, 2018
  22. Jeff KingJul 13, 2018
  23. Jeff KingJul 13, 2018
  24. Ramsay JonesJul 13, 2018
  25. Jeff KingJul 13, 2018
  26. 1/2 fsck: split ".gitmodules too large" error from parse failureJeff King, Jul 13, 2018
  27. 2/2 fsck: downgrade gitmodulesParse default to "info"Jeff King, Jul 13, 2018
  28. Stefan BellerJul 13, 2018
  29. Junio C HamanoJul 16, 2018
  30. Jeff KingJul 16, 2018
  31. Junio C HamanoJul 16, 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.