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

[PATCH/RFC] alias.c: Replace git_config with git_config_get_string

From
Tanay Abhra <tanayabh@gmail.com>
Date
Jun 16, 2014, 09:15 UTC
Message-ID
<1402910154-417-1-git-send-email-tanayabh@gmail.com>

Original implementation uses a callback based approach which has some deficiencies like a convoluted control flow and redundant variables. Use git_config_get_string instead of git_config to take advantage of the config hash-table.

Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
---

**DOUBT** This patch builds on top of patch series[1]. The first patch in the replace `git_config` series is [2], which passed all the tests.

But this patch falters at this test in t1300-repo-config.sh,
git config alias.checkconfig "-c foo.check=bar config foo.check" &&
		echo bar >expect &&
		git checkconfig >actual &&
		test_cmp expect actual

I hand tested this case and the outputs match. But I don't know why the tests are failing.

In t1300-repo-config this test also fails,

# git config alias.split-cmdline-fix 'echo "' && # test_must_fail git split-cmdline-fix && # echo foo > foo && # git add foo && # git commit -m 'initial commit' && # git config branch.master.mergeoptions 'echo "' && # test_must_fail git merge master

Can anybody help me with this one? Thanks.

[1] http://thread.gmane.org/gmane.comp.version-control.git/251704 [2] http://thread.gmane.org/gmane.comp.version-control.git/251707

Cheers, Tanay Abhra.

 alias.c | 27 ++++++++++-----------------
 1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/alias.c b/alias.c
index 5efc3d6..fffad73 100644
--- a/alias.c
+++ b/alias.c
@@ -1,24 +1,17 @@
 #include "cache.h"
 
-static const char *alias_key;
-static char *alias_val;
-
-static int alias_lookup_cb(const char *k, const char *v, void *cb)
-{
-	if (starts_with(k, "alias.") && !strcmp(k + 6, alias_key)) {
-		if (!v)
-			return config_error_nonbool(k);
-		alias_val = xstrdup(v);
-		return 0;
-	}
-	return 0;
-}
-
 char *alias_lookup(const char *alias)
 {
-	alias_key = alias;
-	alias_val = NULL;
-	git_config(alias_lookup_cb, NULL);
+	char *alias_key, *alias_val;
+	const char *v;
+	alias_key = xmalloc(7+strlen(alias));
+	strcpy(alias_key, "alias.");
+	strcat(alias_key, alias);
+	v = git_config_get_string(alias_key);
+	if (!v)
+		config_error_nonbool(alias_key);
+	alias_val = xstrdup(v);
+	free(alias_key);
 	return alias_val;
 }
 
-- 
1.9.0.GIT
Next: Jeff King
Message 1 of 4 in “alias.c: Replace git_config with git_config_get_string”
  1. alias.c: Replace git_config with git_config_get_stringTanay Abhra, Jun 16, 2014
  2. Jeff KingJun 17, 2014
  3. Tanay AbhraJun 17, 2014
  4. Jeff KingJun 17, 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.