[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