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

[PATCH v4 0/6] Rewrite `git_config()` using config-set API

From
Tanay Abhra <tanayabh@gmail.com>
Date
Jul 29, 2014, 11:28 UTC
Message-ID
<1406633302-23144-1-git-send-email-tanayabh@gmail.com>
[PATCH v4]: One style nit corrected, also added key to error messages.
	Diff with v3 at the bottom for easy review.
[PATCH V3]:All the suggestions in [3] applied. Built on top of [1].
[PATCH V2]: All the suggestions in [2] incorporated. git_config() now follows
	correct parsing order. Reordered the patches. Removed xfuncname patch
	as it was unnecssary.

This series builds on the top of topic[1] in the mailing list with name "git config cache & special querying API utilizing the cache".

This series aims to do these three things,
* Use the config-set API to rewrite git_config().
* Solve any legacy bugs in the previous system while at it.
* To be feature complete compared to the previous git_config() implementation,
  which I think it is now. (added the line number and file name info just for
  completeness)

Also, I haven't yet checked the exact improvements but still as a teaser, git status now only rereads the configuration files twice instead of four times.

[1]: http://thread.gmane.org/gmane.comp.version-control.git/254286 [2]: http://thread.gmane.org/gmane.comp.version-control.git/254101 [3]: http://thread.gmane.org/gmane.comp.version-control.git/254211

Tanay Abhra (6):
  config.c: fix accuracy of line number in errors
  add line number and file name info to `config_set`
  rewrite git_config() to use the config-set API
  add a test for semantic errors in config files
  config: add `git_die_config()` to the config-set API
  add tests for `git_config_get_string_const()`
 Documentation/technical/api-config.txt |   5 ++
 cache.h                                |  25 +++++++
 config.c                               | 118 +++++++++++++++++++++++++++++----
 t/t1308-config-set.sh                  |  21 ++++++
 t/t4055-diff-context.sh                |   2 +-
 test-config.c                          |  10 +++
 6 files changed, 167 insertions(+), 14 deletions(-)
-- 
1.9.0.GIT

-- >8 --
diff --git a/config.c b/config.c
index f2d1811..16e99bf 100644
--- a/config.c
+++ b/config.c
@@ -1251,9 +1251,10 @@ static int configset_iter(struct config_set *cs, config_fn_t fn, void *data)
 		if (fn(entry->key, values->items[value_index].string, data) < 0) {
 			kv_info = values->items[value_index].util;
 			if (!kv_info->linenr)
-				die("unable to parse command-line config");
+				die("unable to parse '%s' from command-line config", entry->key);
 			else
-				die("bad config file line %d in %s",
+				die("bad config variable '%s' at file line %d in %s",
+					entry->key,
 					kv_info->linenr,
 					kv_info->filename);
 		}
@@ -1566,9 +1567,12 @@ void git_die_config(const char *key)
 	values = git_config_get_value_multi(key);
 	kv_info = values->items[values->nr - 1].util;
 	if (!kv_info->linenr)
-		die("unable to parse command-line config");
+		die("unable to parse '%s' from command-line config", key);
 	else
-		die("bad config file line %d in %s", kv_info->linenr, kv_info->filename);
+		die("bad config variable '%s' at file line %d in %s",
+			key,
+			kv_info->linenr,
+			kv_info->filename);
  }
 
 /*
diff --git a/t/t1308-config-set.sh b/t/t1308-config-set.sh
index 3217b4d..f012dd6 100755
--- a/t/t1308-config-set.sh
+++ b/t/t1308-config-set.sh
@@ -126,7 +126,7 @@ test_expect_success 'find string value for a key' '
 
 test_expect_success 'check line error when NULL string is queried' '
 	test_expect_code 128 test-config get_string case.foo 2>result &&
-	grep "fatal: bad config file line 7 in .git/config" result
+	grep "fatal: bad config variable '\''case.foo'\'' at file line 7 in .git/config" result
 '
 
 test_expect_success 'find integer if value is non parse-able' '
@@ -215,7 +215,7 @@ test_expect_success 'check line errors for malformed values' '
 		br
 	EOF
 	test_expect_code 128 git br 2>result &&
-	grep "fatal: bad config file line 2 in .git/config" result
+	grep "fatal: bad config variable '\''alias.br'\'' at file line 2 in .git/config" result
 '
 
 test_done
diff --git a/t/t4055-diff-context.sh b/t/t4055-diff-context.sh
index cd04543..741e080 100755
--- a/t/t4055-diff-context.sh
+++ b/t/t4055-diff-context.sh
@@ -79,7 +79,7 @@ test_expect_success 'non-integer config parsing' '
 test_expect_success 'negative integer config parsing' '
 	git config diff.context -1 &&
 	test_must_fail git diff 2>output &&
-	test_i18ngrep "bad config file" output
+	test_i18ngrep "bad config variable" output
 '
 
 test_expect_success '-U0 is valid, so is diff.context=0' '
-- >8 --
Next: Tanay Abhra
Message 1 of 13 in “Rewrite `git_config()` using config-set API”
  1. 0/6 Rewrite `git_config()` using config-set APITanay Abhra, Jul 29, 2014
  2. 1/6 config.c: fix accuracy of line number in errorsTanay Abhra, Jul 29, 2014
  3. 2/6 add line number and file name info to `config_set`Tanay Abhra, Jul 29, 2014
  4. 3/6 rewrite git_config() to use the config-set APITanay Abhra, Jul 29, 2014
  5. Tanay AbhraJul 29, 2014
  6. Matthieu MoyJul 29, 2014
  7. Matthieu MoyJul 29, 2014
  8. Tanay AbhraJul 29, 2014
  9. Matthieu MoyJul 29, 2014
  10. Tanay AbhraJul 29, 2014
  11. 4/6 add a test for semantic errors in config filesTanay Abhra, Jul 29, 2014
  12. 5/6 config: add `git_die_config()` to the config-set APITanay Abhra, Jul 29, 2014
  13. 6/6 add tests for `git_config_get_string_const()`Tanay Abhra, Jul 29, 2014

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.