t4018-diff-funcname.sh fails for the new `git_config()` which uses the configuration files caching layer internally. The test introduced in commit d64d6cdc checks that whether `xfuncname` takes precedence over `funcname` variable which was not guaranteed by config API previously and worked only because values were parsed and fed in order. The new `git_config()` only guarantees precedence order for variables with the same name. Also `funcname` variable is deprecated and not documented properly. `xfuncname` is mentioned in the docs and takes precedence over `funcname`. Instead of removing `funcname` variable, enforce `xfuncname` precedence over `funcname` when the variables have the same subsection. Remove dependency that required values to be fed to userdiff_config() in parsing order for the test to succeed. Signed-off-by: Tanay Abhra <tanayabh@xxxxxxxxx> --- Note: this the only test that failed for the new git_config() rewrite. userdiff.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/userdiff.c b/userdiff.c index fad52d6..a51bc89 100644 --- a/userdiff.c +++ b/userdiff.c @@ -2,6 +2,7 @@ #include "userdiff.h" #include "cache.h" #include "attr.h" +#include "string-list.h" static struct userdiff_driver *drivers; static int ndrivers; @@ -211,9 +212,12 @@ int userdiff_config(const char *k, const char *v) struct userdiff_driver *drv; const char *name, *type; int namelen; + char *subsection = NULL; + static struct string_list xflag = STRING_LIST_INIT_DUP; if (parse_config_key(k, "diff", &name, &namelen, &type) || !name) return 0; + subsection = xstrndup(name, namelen); drv = userdiff_find_by_namelen(name, namelen); if (!drv) { @@ -224,10 +228,16 @@ int userdiff_config(const char *k, const char *v) drv->binary = -1; } - if (!strcmp(type, "funcname")) + if (!strcmp(type, "funcname") && !unsorted_string_list_has_string(&xflag, subsection)) { + free (subsection); return parse_funcname(&drv->funcname, k, v, 0); - if (!strcmp(type, "xfuncname")) + } + if (!strcmp(type, "xfuncname")) { + string_list_append(&xflag, subsection); + free (subsection); return parse_funcname(&drv->funcname, k, v, REG_EXTENDED); + } + free(subsection); if (!strcmp(type, "binary")) return parse_tristate(&drv->binary, k, v); if (!strcmp(type, "command")) -- 1.9.0.GIT -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html