On Wed, Jul 23, 2014 at 2:42 PM, Tanay Abhra <tanayabh@xxxxxxxxx> wrote: > 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 s/that// > 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 s/\s+/ / > 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